Aar*_*ron 1 javascript c# json knockout-mapping-plugin knockout.js
我一直在这周围,并没有看到出错的地方.也许你可以帮忙.
有多种视图模型设置:
var viewModels = {
emailTemplateViewModel: {
subject: new ko.observable('dd'),
emailName: new ko.observable('dd'),
emailAddress: new ko.observable('dd'),
body: new ko.observable('dd')
},
deviceSettingsViewModel: {
managerName: new ko.observable('')
}
}
ko.applyBindings(viewModels);
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用从服务器返回的JSON填充其中一个视图模型(这是正确的并且格式正确).
function LoadEmailTemplate() {
$.getJSON('/EmailTemplate/Template', function (data) {
viewModels.emailTemplateViewModel = ko.mapping.fromJS(data);
ko.applyBindings(viewModels.emailTemplateViewModel);
})
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行此操作时,我收到以下错误:"未捕获错误:您无法多次将绑定应用于同一元素."
但是我读到的所有文档都显示了映射后发生的绑定.
如果我从LoadEmailTemplate函数中取出绑定,那么在运行时没有错误,但页面显示默认值'dd',而不是那些应该从JSON响应映射的值.
该函数触发如下:
<li data-bind="click: LoadEmailTemplate"><a href="#"><i class="glyphicon glyphicon-chevron-right pull-right"></i>Email Template</a></li>
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用with-binding,因为电子邮件模板仅相对于页面的某个区域,例如
<div data-bind="with: emailTemplateViewModel">
Run Code Online (Sandbox Code Playgroud)
和属性:
<input data-bind="value: emailAddress" type="email" class="form-control" id="inputFromEmail">
Run Code Online (Sandbox Code Playgroud)
我知道这是有效的,因为表单加载了首次定义viewmodel时设置的值.看起来好像只是映射不合适.任何建议都会非常感激.
谢谢.
两件事,1 - 不要多次应用绑定,即使这有效也会导致后续问题.
2 - 当你从ajax调用中获取对象时,不要覆盖现有对象,这样做会破坏绑定,而是将现有对象值设置为新值.
function LoadEmailTemplate() {
$.getJSON('/EmailTemplate/Template', function (data) {
viewModels.emailTemplateViewModel.subject(data.subject);
viewModels.emailTemplateViewModel.emailName(data.emailName);
viewModels.emailTemplateViewModel.emailAdrress(data.emailAddress)
viewModels.emailTemplateViewModel.body(data.body)
})
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
903 次 |
| 最近记录: |