【问题标题】:Knockout JS mapping plugin confusionKnockout JS 映射插件混淆
【发布时间】:2012-02-08 00:36:57
【问题描述】:

我对使用映射插件时应该在何时何地声明我的 viewModel 感到困惑。

这是我的 json 文件:

{
    "members": [
        {
            "memberid": "001",
            "membername": "Jason"
        },
       {
            "memberid": "002",
            "membername": "Bob"
        }
    ]
}

这是 html 模板:

<div data-bind="foreach: members">
<h3 data-bind="text: memberid"></h3>
<p>Name: <span data-bind="text: membername"></span></p>  
</div>

这是其余的:

var data = $.getJSON("members.json",function(data)  
            {
                var viewModel = ko.mapping.fromJSON(data);
                 ko.applyBindings(viewModel);

            }
        );

ko.mapping.fromJSON(data, viewModel);

提前感谢您的帮助!

【问题讨论】:

    标签: knockout.js knockout-mapping-plugin


    【解决方案1】:

    您可能希望在闭包之外声明您的 viewModel,因此它更易于访问。例如:

    var viewModel = {};
    var data = $.getJSON("members.json",function(data)  
                {
                    viewModel.model = ko.mapping.fromJSON(data);
                     ko.applyBindings(viewModel);
                }
            );
    

    这将创建 viewModel,使其可访问,并公开模型属性(其中将包含所有映射数据)。您也可以跳过模型属性并在 vm 上执行此操作。您甚至可以将 applyBindings 移到此之外,因为您真的只希望它运行一次。

    【讨论】:

    • 谢谢!快到了...我得到一个无法解析的错误。 “未定义成员。”
    • 映射正在创建viewModel.model.members,我将通过使用映射和视图模型参数调用函数并忽略返回值来更改它以更新现有视图模型,因此您拥有viewModel.members:@987654325 @
    • 我正在尝试关注这篇文章,但映射似乎不适用于我的数组,有人有什么想法吗? stackoverflow.com/questions/24295450/…
    猜你喜欢
    • 1970-01-01
    • 2012-12-26
    • 2014-04-29
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 2012-03-23
    相关资源
    最近更新 更多