繁体   English   中英

KnockoutJS并将单个对象绑定到视图模型

[英]KnockoutJS and binding a single object to a 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响应映射的默认值。

该函数触发如下:

<li data-bind="click: LoadEmailTemplate"><a href="#"><i class="glyphicon glyphicon-chevron-right pull-right"></i>Email Template</a></li>

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

<div data-bind="with: emailTemplateViewModel">

以及属性:

<input data-bind="value: emailAddress" type="email" class="form-control" id="inputFromEmail">

我知道这是可行的,因为在第一次定义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)
    })
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM