我是KnockoutJS的新手并观察了主网站上的一些示例http://knockoutjs.com/examples/contactsEditor.html,有时在访问observable时会使用括号,有时则不使用括号。
在访问observables(和observableArrays)时,有人可以向我解释括号在哪些实例中是合适的?
带有括号和无括号的代码片段,用于访问相同的observable:
self.contacts = ko.observableArray(ko.utils.arrayMap(contacts, function(contact) {
return { firstName: contact.firstName, lastName: contact.lastName,
phones:ko.observableArray(contact.phones) };
}));
// ....
self.removePhone = function(phone) {
$.each(self.contacts(), function() { this.phones.remove(phone) })
};
self.save = function() {
self.lastSavedJson(JSON.stringify(ko.toJS(self.contacts), null, 2));
};
答案 0 :(得分:1)
在Knockout中,当您需要评估可观察量时使用括号。 Observable是函数,因此您需要调用函数来获取值。因此,如果您有self.contacts = ko.observable()
来获取此值,则可以使用self.contacts()
。要设置您使用的值self.contacts(2)
。
如果您希望敲除知道值何时发生变化,您需要声明一个observable:
Knockout文档解释了一些关于可观察量的内容:http://knockoutjs.com/documentation/observables.html
答案 1 :(得分:1)
我们通常用ko括号来评估observable/observableArray
。
示例:
self.value1 = ko.observable(2);
self.value2 = 2 ;
带括号的:
self.value1() gives you 2
self.value1 gives you function(){//blah blah} which actually denotes its observable
没有括号:
self.value2() gives undefined i.e not a function
self.value2 gives you 2
简而言之,observables值只能使用括号来访问。如果您直接指定self.value2=2
表示它就像var s=2
那样,那么尝试将变量的值设为s()
是没有意义的,我们可以简单地使用s
在您的方案中:
案例1:
如果他们通过contact.firstName
访问值,则返回内部返回意味着firstName
无法观察到
self.contacts = ko.observableArray(ko.utils.arrayMap(contacts, function(contact) {
return { firstName: contact.firstName, lastName: contact.lastName,
phones:ko.observableArray(contact.phones) };
}));
案例2:
这里self.contacts
不是一个普通数组,它的可观察数组可以访问它的内容&要循环,我们在那里使用()
self.removePhone = function(phone) {
$.each(self.contacts(), function() { this.phones.remove(phone) })
};
案例3:
在ko.toJS
内,即使self.contacts
或self.contacts()
都可以(参见上文)
self.save = function() {
self.lastSavedJson(JSON.stringify(ko.toJS(self.contacts), null, 2));
};
如果您更改了预览数据保持静态的内容,您可以在这个小提琴 here 中查看自己,这只是说双向绑定不存在(不可观察)