2

我有以下视图模型:

var ViewModel = function (myList) {
    var self = this;

    this.sName = ko.observable($('#s-input').select(0).val());
};

我想访问存储在 sName 中的值来进行一些验证:

在提交时,我调用一个验证函数来检查属性是否设置为某个特定值。但我无法访问属性 sName。文档说我们可以通过说

ViewModel.sName()

我无法让它工作。我尝试了 ViewModel.sName()、ViewModel().sName() 等。

有人有想法吗?

4

2 回答 2

2

您创建的结构是构造函数。

您需要ViewModel通过执行以下操作来创建您的实例:

var vm = new ViewModel(list);

然后,您可以vm.sName()访问 observable 的值;

于 2012-07-10T21:32:37.003 回答
0

这可能比您需要的解释更多,但看起来您将对象定义与对象混淆了。您发布的代码定义了一个function,而不是一个object。注意第一行:

var ViewModel = function (myList) { ...  

在这里,您实质上是在定义一个 javascript“类”(javascript 并没有真正的类,但它是有用的术语)。我们将此定义称为 a constructor,因为当我们调用它时,它会构造该类型的对象。您仍然需要将该类型实例化为对象,然后才能像对象一样使用它。

RP Niemeyer 向您展示了如何做到这一点。因为你constructor需要一个myList参数,所以 RP 在一个列表中传递。通常,您将从服务器提供此列表作为视图模型中的初始数据。在您的特定情况下,您似乎没有使用它,因此您可以将其排除在外。

您可能会考虑的一件事是将您正在使用的 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!!
于 2012-07-10T23:25:05.933 回答