我认为我错过了某个基本概念。 下面代码的输出是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();
加载页面时不显示任何值。并且没有错误。
亲切的问候, EV
答案 0 :(得分:0)
感谢您的回复,它确实将我的思维过程发送到解决问题的路径上!
我的问题似乎是在映射和处理顺序中。 一般来说,我误解了映射中'create'的功能。 我认为它可以帮助检索和填充模型。
所以这最终成了我的解决方案:
将其映射到视图模型
var model = { };
var vm;
$(document).ready(function () {
$.ajax({
type: "GET",
url: 'Manage.aspx/GetContact',
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function (results) {
model = results.d;
},
error: function (err) {
alert(err.status + " - " + err.statusText);
}
});
vm = ko.mapping.fromJS(model);
ko.applyBindings(vm);
});