KnockoutJS并将单个对象绑定到viewmodel

我一直在这周围,并没有看到出现问题的地方。 也许你可以帮忙。

有多种视图模型设置:

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); 

我正在尝试使用从服务器返回的JSON填充其中一个视图模型(这是正确的并且格式正确)。

 function LoadEmailTemplate() { $.getJSON('/EmailTemplate/Template', function (data) { viewModels.emailTemplateViewModel = ko.mapping.fromJS(data); ko.applyBindings(viewModels.emailTemplateViewModel); }) } 

但是,当我运行它时,我收到以下错误:“未捕获错误:您不能多次将绑定应用于同一元素。”

但是我读到的所有文档都显示了映射后发生的绑定。

如果我从LoadEmailTemplate函数中取出绑定,则运行时没有错误,但页面显示默认值’dd’,而不是那些应该从JSON响应映射的值。

该函数触发如下:

 
  • Email Template
  • 我正在尝试使用with-binding,因为电子邮件模板仅相对于页面的某个区域,例如

     

    和属性:

      

    我知道这是有效的,因为表单加载了首次定义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) }) }