这可能比您需要的解释更多,但看起来您将对象定义与对象混淆了。您发布的代码定义了一个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!!