我有两个ViewModel(虽然我喜欢将'Person'ViewModel视为模型):
function Person() {
var self = this;
self.firstName = ko.observable("");
self.lastName = ko.observable("");
}
function AppViewModel() {
var self = this;
self.admin = ko.observable(null);
self.something = ko.observable("Hello World");
}
然后我将AppViewModel.admin设置为Person的实例:
var viewModel = new AppViewModel();
var bob = new Person();
bob.firstName("Sponge");
bob.lastName("Bob");
viewModel.admin(bob);
ko.applyBindings(viewModel);
然后我尝试像这样绑定它:
<p><strong data-bind="text: admin.firstName"></strong></p>
<p><strong data-bind="text: admin.lastName"></strong></p>
<p><strong data-bind="text: something"></strong></p>
我希望这个输出是:
海绵
的鲍勃
Hello World
然而事实并非如此,输出只是“Hello World” (显然'某事'只是AppViewModel的一个可观察者,因此该部分有效)
有人可以解释为什么它不起作用而我应该做什么呢?
关于jsFiddle的完整示例:http://fiddle.jshell.net/XRPAH/1/
答案 0 :(得分:2)
“admin”是一个可观察的,所以你需要“调用它”来访问所包含的值:
<p><strong data-bind="text: admin().firstName"></strong></p>
实际上,如果你这样做
data-bind="text: something"
这只是
的简写data-bind="text: something()"
但是如果observable是admin.firstName
等表达式的一部分,则需要明确写下括号。
答案 1 :(得分:1)
您的对象admin
是可观察的,因此您需要使用()
例如:
<p><strong data-bind="text: admin().firstName"></strong></p>
和html第一行中的相同,应该是这样的
<p><strong data-bind="text: admin().firstName() + ' '+ admin().lastName()"></strong>
</p>
请检查此 Working Demo