我有以下代码,虽然我没有看到第一个名字在表单文本框中的值?我可以在firebug中看到价值是正确的吗? 任何帮助非常感谢!
Firebug - 控制台窗口
pageModel.firstname() // shows value: 'Jane'
HTML
<input id="Firstname" name="Firstname" data-bind="value: pageModel.firstname'" />
JS
$(function() {
pageModel = (function() {
var init = function(data) {
this.firstname = ko.observable(data.Member.FirstName);
...
...
};
return { init: init }; // Revealing module pattern
})();
ko.applyBindings(pageModel);
var serverModel = <%=ViewData.Model.ToJson() %>;
pageModel.init(serverModel);
});
JSON对象
{"Member":{FirstName: 'Jane'}}
答案 0 :(得分:1)
您的视图模型为pageModel
,因此您的绑定仅引用视图模型上的对象。将绑定更改为:
data-bind='value: firstName'
你应该全力以赴。
答案 1 :(得分:1)
那里有几个问题:
在初始化视图模型之前,您正在应用绑定。如果您打开自己的网络控制台,则会看到KO发来的错误,说它不知道pageModel
是什么。
即使您初始化模型,它仍然没有pageModel
属性。只是一个firstname
财产。
在绑定结束时您还有一个'
。
另外,您的代码会成为The Horror of Implicit Globals的牺牲品,因为您并未在任何地方声明pageModel
。
一些修正:
$(function() {
// Added `var` here
var pageModel = (function() {
var init = function(data) {
this.firstname = ko.observable(data.Member.FirstName);
...
...
};
return { init: init }; // Revealing module pattern
})();
var serverModel = <%=ViewData.Model.ToJson() %>;
pageModel.init(serverModel);
// Moved this to end
ko.applyBindings(pageModel);
});
并在HTML中:
<input id="Firstname" name="Firstname" data-bind="value: firstname" />
<!-- No `pageModel.` here -------------------------------^ ^
No single quote here ---------------------------------------/
-->
如果你真的想在调用pageModel.init
之前应用绑定,你需要做一些事情来创建firstname
observable,然后在{ {1}}使用init
参数更新observable(而不是创建新参数)。
答案 2 :(得分:0)
主要问题是你应该只使用data-bind =&#34; value:firstname&#34;没有&#39;和pageModel。
如果您创建一个可以创建对象的ViewModel,它会更容易阅读。
HTML:
<input id="Firstname" name="Firstname" data-bind="value: firstname" />
js:
$(function() {
var serverModel = <%=ViewData.Model.ToJson() %>;
var viewModel = new ViewModel(serverModel);
ko.applyBindings(viewModel);
});
var ViewModel = function(serverModel) {
var self = this;
self.firstname = ko.observable(serverModel.Member.FirstName);
};
答案 3 :(得分:0)
您可以检查数据绑定的上下文。它已经是pageModel了。你不需要重复上下文来淘汰赛。与data-bind="with: pageModel"
一样好,并且此元素内的绑定不需要重复pageModel
。