【问题标题】:Data binding issue with knockout and revealing module pattern淘汰赛和揭示模块模式的数据绑定问题
【发布时间】:2012-08-16 11:19:09
【问题描述】:

在使用显示模块模式时,我无法让数据绑定与 Knockout 一起使用。

我的javascript是这样的

var HMS = HMS || {};

$(function () {

    HMS.PatientModel = function () {
        this.Patient_Name = ko.observable();
        this.Patient_Address = ko.observable();
    };

    HMS.PatientViewModel = function () {
        var patient = ko.observable(),
        loadPatient = function () {
            patient = new HMS.PatientModel();
            patient.Patient_Name("Premkumar");
        };
        return {
            patient: patient,
            loadPatient: loadPatient
        };
    } ();

    HMS.PatientViewModel.loadPatient();
    ko.applyBindings(HMS.PatientViewModel);

});

我无法使数据绑定与患者姓名一起正常工作。 HTML div 标签有data-bind="text:patient.Patient_Name"

请参考jsFiddlehttp://jsfiddle.net/stprem/pp9ym/1/中的代码。如果您能告诉我我在数据绑定方面做错了什么,我将不胜感激。

【问题讨论】:

    标签: javascript knockout.js


    【解决方案1】:

    在您的loadPatient 函数中,您将patient 变量替换为一个新对象,但您的模块已经返回了对原始可观察对象的引用。因此,以这种方式更新它不会更新对象返回的内容。

    这是一个选项:http://jsfiddle.net/rniemeyer/pp9ym/6/

    基本上,您将patient 保留为可观察对象,然后在您的loadPatient 函数中更新它。在您看来,使用with 绑定可以帮助您防止对象为空,以防您在调用ko.applyBindings 后想要加载它。

    【讨论】:

    • 为您提供了很多帮助,现在可以正常工作了。我理解您回答的第一部分,但对于 HTML 部分,我不太清楚为什么我无法使用 Patient.Patient_Name 设置文本。
    • 您可以在应用绑定之前加载您的数据。我只是想证明使用with 绑定可以让您绑定空的可观察对象,然后再填充它。如果您从服务器加载数据(在应用绑定之后),这只是一个选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    • 2015-11-16
    • 1970-01-01
    • 2014-09-18
    • 2014-04-09
    • 2012-12-22
    相关资源
    最近更新 更多