首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用映射插件映射数据?淘汰赛

无法使用映射插件映射数据?淘汰赛
EN

Stack Overflow用户
提问于 2014-11-23 16:19:08
回答 2查看 104关注 0票数 0

我试图将我的数据绑定到视图中,但是我的所有尝试都失败了。

有一个数组的数据,我存储在一个变量,后来使用映射插件,我正在使那些可观察的,以绑定到视图。

有趣的是,我在console中没有错误,我检查了

代码语言:javascript
复制
<span data-bind="text: ko.toJSON(Item)"></span> 

我可以看到我的数组,但我看不到它绑定到视图。

脚本代码:

代码语言:javascript
复制
console.log(ko.mapping.fromJS(jsonData));
var viewModel = new MainModel();
viewModel.Item(ko.mapping.fromJS(jsonData));
ko.applyBindings(viewModel);

小提琴链接是Here

这是我关于映射插件.Please的第一条线索,建议我参考一下如何使用映射插件构建一些复杂的东西。

任何更好的方法都是可取的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-24 05:39:32

我不记得了,但这和我两天前问的问题一样。

我想,如果你想要类似的一旦问题,我已经解决了,你可以找到它在你的更新小提琴。我还将淘汰版更新为3.2.0。

http://jsfiddle.net/C46pU/9/

代码语言:javascript
复制
var mapping = {
    'Items': {
        create: function(options) {
            console.log('Inside Mapping Item');
            return new ChildModel(options.data);
        }
    },
     'Value': {
         create: function(options){
                  console.log('Inside Mapping Value');
                  return new ChildModel(options.data);
         }
       }
 };

$(document).ready(function () {

           var jsonData = {"Items":[{"Value":[{"Value1":"1","Value2":"2"},{"Value1":"3","Value2":"4"}]},{"SelectedOption":["Item2"],"Value":[{"Value1":"5","Value2":"6"},{"Value1":"7","Value2":"8"},{"Value1":"9","Value2":"10"}]}]};

         var viewModel = new MainModel(jsonData);                    
         ko.applyBindings(viewModel);                         
        });

        function ValueModel() {
            var self = this;
            self.Value1 = ko.observable();
            self.Value2 = ko.observable();
        }

        function ChildModel(data) {
            var self = this;
            self.SelectedOption = ko.observable();
            self.Value = ko.observableArray([]);
            if(data != null)
            {
                console.log(data);
                ko.mapping.fromJS(data,mapping,self);
            }
            self.AddValue = function () {
                self.Value.push(new ValueModel());
            }
        }


        function MainModel(data) {
            var self = this;            
            self.Items = ko.observableArray([]);
            if(data != null)
            {
                console.log('Inside Main Model');
                console.log(data);
                ko.mapping.fromJS(data,mapping, self);
            }           

            self.dropDownItem = ko.observableArray(['Item1', 'Item2', 'Item3', 'Item4']);

            self.AddItem = function () {
                self.Items.push(new ChildModel());
            }
        }
票数 1
EN

Stack Overflow用户

发布于 2014-11-23 20:39:42

我已经修改了你的小提琴,添加了“映射”防御和其他一些变化(我害怕失去来源,因此我张贴在这里)。

最主要的是

代码语言:javascript
复制
var mapping = {
    'Item': {
        create: function(options) {
            return new ChildModel(options.data);
        }
    }
} 

映射插件将被迫使用特定的对象创建函数,然后反序列化cild模型。

标记:

代码语言:javascript
复制
    <h2>Nested</h2>
<table  cellpadding="10" cellspacing="5" style="padding:10px;">
    <tbody data-bind="foreach: Item">
    <tr >
        <td>
            <select data-bind="options: $root.dropDownItem, selectedOptions: $data.SelectedOption && SelectedOption() || ''"></select>
        </td>
        <td>
            <input type="button" data-bind="click: AddValue" value="Add Value" />
        </td>
        <td>
            <table data-bind="foreach: Value">
                <tr>
                    <td><input type="text" data-bind="value: Value1" /></td>
                    <td><input type="text" data-bind="value: Value2"/></td>
                </tr>
            </table>
        </td>
    </tr>
    </tbody>
</table>
<div>
    <input type="button" value="Add Item" data-bind="click: AddItem" />
</div>
<div>
    <span data-bind="text: ko.toJSON(Item)"></span>
</div>

代码:

代码语言:javascript
复制
 $(document).ready(function () {

           var jsonData = {"Item":[{"Value":[{"Value1":"1","Value2":"2"},{"Value1":"3","Value2":"4"}]},{"SelectedOption":["Item2"],"Value":[{"Value1":"5","Value2":"6"},{"Value1":"7","Value2":"8"},{"Value1":"9","Value2":"10"}]}]};
var mapping = {
    'Item': {
        create: function(options) {
            return new ChildModel(options.data);
        }
    }
}
     var viewModel = new MainModel();
          viewModel.Item(ko.mapping.fromJS(jsonData, mapping).Item());
ko.applyBindings(viewModel);    

        });

        function ValueModel() {
            var self = this;
            self.Value1 = ko.observable();
            self.Value2 = ko.observable();
        }

        function ChildModel() {
            var self = this;
            self.SelectedOption = ko.observable();
            self.Value = ko.observableArray([new ValueModel()]);

            self.AddValue = function () {
                self.Value.push(new ValueModel());
            }
        }


        function MainModel() {
            var self = this;            
            self.Item = ko.observableArray([]);

            init();

            function init() {
                self.Item.push(new ChildModel());                
            }

            self.dropDownItem = ko.observableArray(['Item1', 'Item2', 'Item3', 'Item4']);

            self.AddItem = function () {
                self.Item.push(new ChildModel());
            }
        }

希望能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27091175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档