我试图了解淘汰赛的语法并遇到问题。
我的ko viewmodel示例
var Market = function (e) {
var self = this;
self.MarketId = ko.observable(e ? e.MarketId : '');
self.Description = ko.observable(e ? e.Description : '');
};
var MarketAddViewModel = function () {
var self = this;
var url = "/api/market";
self.newMarket = ko.observable(new Market());
// Save market
saveMarket = function (item) {
$.ajax({
type: 'POST',
url: url,
data: ko.toJS(item),
success: function (data) {
// SUCCESS
},
error: function (err) {
var err = JSON.parse(err.responseText);
var errors = "";
for (var key in err) {
if (err.hasOwnProperty(key)) {
errors += key.replace("employee.", "") + " : " + err[key];
}
}
alert('error');
//$("<div></div>").html(errors).dialog({ modal: true, title: JSON.parse(err.responseText).Message, buttons: { "Ok": function () { $(this).dialog("close"); } } }).show();
},
complete: function () {
// complete
}
});
};
};
要绑定它我使用此代码
$(document).ready(function () {
ko.applyBindings(new MarketAddViewModel());
});
然后是HTML元素
<input data-bind="value: Description" type="text" class="required input-xxlarge" name="description" id="description" />
但是当加载此页面时,我收到“描述未定义”
有任何线索吗?
答案 0 :(得分:1)
我认为需要
<input data-bind="value: newMarket().Description" type="text" class="required input-xxlarge" name="description" id="description" />
(请注意newMarket().
),因为它是MarketAddViewModel
实例的属性。括号将提取可观察值,以便可以提取其“描述”属性。
答案 1 :(得分:1)
您可以使用with binding将子元素的上下文更改为newMarket上下文
<div data-bind="with: newMarket">
<input data-bind="value: Description" type="text" class="required input-xxlarge" name="description" id="description" />
</div>
编辑:我也可以借此机会为我的配置lib上的约定制作一些PR 上面的语法看起来像
<div data-name="newMarket">
<input data-name="Description" type="text" class="required input-xxlarge" name="description" id="description" />
</div>
https://github.com/AndersMalmgren/Knockout.BindingConventions