我想我在某处遗漏了一个基本概念。下面代码的输出是 100%,但对象的属性没有“观察到”。
<script>
var model = { };
var mapping = {
create: function () {
var _profile;
$.ajax({
type: "GET",
url: 'Manage.aspx/GetContact',
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function (results) {
_profile = results.d;
},
error: function (err) {
alert(err.status + " - " + err.statusText);
}
});
return _profile;
}
};
$(document).ready(function () {
var vm = ko.mapping.fromJS(model, mapping);
ko.applyBindings(vm);
});
</script>
<dl class="dl-horizontal">
<dt>
<label>E-Mail:</label></dt>
<dd><span data-bind="text: E_Mail" /></dd>
<dd><asp:TextBox runat="server" data-bind="value: E_Mail" /></dd>
</dl>
我背后的代码:
[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public static DynamicsNAV.NavContact.Contact GetContact()
{
DynamicsNAV.NavContact.Contact contact = ReadContact();
if(contact == null)
{
contact = new DynamicsNAV.NavContact.Contact();
contact.E_Mail = HttpContext.Current.User.Identity.Name;
}
return contact;
}
在此示例中,我尝试查看在更改文本框中的电子邮件地址时 UI 是否更新,但事实并非如此。如果我添加电子邮件:ko.observable(); 属性到模型,并在文本框和标签中使用它,更新按预期工作。
如果我做:
var model = ko.observable();
加载页面时不显示任何值。并且不会引发任何错误。
亲切的问候,电动汽车