我有以下viewModel:
var ViewModel = function (myList) {
var self = this;
this.sName = ko.observable($('#s-input').select(0).val());
};
我想访问存储在sName中的值来进行一些验证:
on submit i调用验证函数,该函数检查属性是否设置为某个特定值。但我无法访问属性sName。 Documentation我们可以通过说
来访问该值ViewModel.sName()
我无法让它发挥作用。我尝试了ViewModel.sName(),ViewModel()。sName()等。
有人有想法吗?
答案 0 :(得分:2)
您创建的结构是构造函数。
您需要通过以下操作创建ViewModel
的实例:
var vm = new ViewModel(list);
然后,您可以vm.sName()
访问observable的值;
答案 1 :(得分:0)
这可能是您需要的更多解释,但看起来您将对象定义与对象混淆。您发布的代码定义了function
,而不是object
。请注意第一行:
var ViewModel = function (myList) { ...
这里你基本上定义了一个javascript" class" (javascript确实没有类,但它有用的术语)。我们将此定义称为constructor
,因为它在我们调用它时构造该类型的对象。您仍然需要将该类型实例化为对象,然后才能像对象一样使用它。
RP Niemeyer向您展示了如何做到这一点。由于您的constructor
采用myList
参数,因此RP会在列表中传递。通常,您将从服务器提供此列表作为viewmodel中的初始数据。在您的具体情况下,您似乎没有使用它,因此您可以将其删除。
您可能会考虑的一件事是传入您用作参数的jQuery选择器,以便可以重复使用它。这看起来像这样:
var ViewModel = function (selector) {
var self = this;
self.sName = ko.observable($(selector).select(0).val());
};
var vm = new ViewModel('#s-input');
var name = vm.sName(); //This is your name property!!