【问题标题】:Basic Knockout JS mapping to a single JSON object基本的 Knockout JS 映射到单个 JSON 对象
【发布时间】:2012-11-17 15:02:51
【问题描述】:

我对淘汰赛非常陌生,正在创建一个 jquery 移动应用程序,希望获得淘汰赛的好处。我花了最后一天把头撞在墙上解决一个非常简单的问题.. 我已经删除了代码并手动手动绑定(因此几乎违背了使用 KO over jquery 的目的).. 无论如何,如果有人可以告诉我如何改变我必须使用 KO 的真正力量,那么这对我来说是一个很好的基础。我能找到的任何代码示例总是针对比这更复杂的问题(处理数组等)

我的 JSON:

{"id":9,"fullName":"John Doe","firstName":"John","lastName":"Doe","referenceNumber":"BUY-08","position":"Buyer","type":"Buyer","telephone":"028 82 240780","email":"m@email.com","departmentId":3,"departmentName":"DEPT B","country":"United Kingdom"}

我的 HTML:

 <div>
    Full Name: <input data-bind="value: fullName" disabled="disabled"/> <br />
    Ref: <input data-bind="value: reference" disabled="disabled"/> <br />
    Position: <input data-bind="value: position" disabled="disabled"/> <br />
    Email: <input data-bind="value: email" disabled="disabled"/> <br />
    Dept: <input data-bind="value: departmentName" disabled="disabled"/> <br />
    Country: <input data-bind="value: country" disabled="disabled"/> <br />
</div>  

我的 Javascript:

$(document).ready(function () { 

    function DetailsViewModel() {
        var self = this; 
        self.fullName = ko.observable("");
        self.reference = ko.observable("");
        self.email = ko.observable("");
        self.position = ko.observable("");
        self.departmentName = ko.observable("");
        self.country = ko.observable("");

        var success = function (data) {
            self.fullName(data.fullName);
            self.reference(data.referenceNumber);
            self.email(data.email);
            self.position(data.position);
            self.departmentName(data.departmentName);
            self.country(data.country);
            $.mobile.loading('hide');
        };

        webAPICall("api/user/getcurrentuser",
            "GET", success); // simple wrapper I'm using for ajax calls

    } 
    ko.applyBindings(new DetailsViewModel()); 
});

非常感谢任何帮助,谢谢!

【问题讨论】:

    标签: javascript json knockout.js knockout-mapping-plugin


    【解决方案1】:

    如果您不需要任何额外的功能或为您的视图模型计算,映射插件的使用非常简单。您应该将 JSON 传递给 ko.mapping.fromJS:

    var viewModel = {};
    
    function success(data) {
        viewModel = ko.mapping.fromJS(data);
        ko.applyBindings(viewModel);
    }
    webAPICall("api/user/getcurrentuser", "GET", success); 
    

    如果数据是JS对象,使用fromJS函数,如果是JSON字符串,使用fromJSON。并确保data-bind 属性和json 中的属性名称相同。

    这是工作示例:http://jsfiddle.net/axrwkr/5t5fj/50/

    【讨论】:

    • 这几乎正是我第一次尝试的。不同之处在于你将 ko.applyBindings 放在了成功方法中 - 我在 document.ready() 函数中声明了它,导致我的数据不显示。谢谢!
    猜你喜欢
    • 2012-03-23
    • 1970-01-01
    • 2012-06-08
    • 2019-02-06
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    相关资源
    最近更新 更多