在javascript中访问Knockout.js viewmodel属性

时间:2012-07-10 21:28:32

标签: knockout.js

我有以下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()等。

有人有想法吗?

2 个答案:

答案 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!!