【问题标题】:KnockOut Mapping Hierarchical JS objectKnockOut 映射分层 JS 对象
【发布时间】:2012-03-23 10:24:30
【问题描述】:

我正在尝试使用 KnockOut 映射插件创建视图模型,

这是对象,基本上下面是一个带有单词的句子。

var data = {
name: 'Example Title',
sentences: [
    {id: 1, words: [{text: 'word1'}, {text: 'word2'}]},
    {id: 2, words: [{text: 'word3'}, {text: 'word4'}]}
           ]};

我想要三个视图模型,

文章应该包含句子,句子应该包含单词

var ArticleViewModel = function(data) 
{
  var self = this;
  self.id = ko.observable(data.id);
  self.sentences = ko.observableArray([]);
}

var SentenceViewModel = function(data) 
{
  var self = this;
  self.id = ko.observable(data.id);
  self.words = ko.observableArray([]);
}

var WordViewModel = function(data) 
{
  var self = this;
  self.id = ko.observable(data.id);
  self.text = ko.observable(data.text);
}

我想把它放在下面的视图中;

<p data-bind="foreach:sentences">
  <span data-bind="foreach:words">
     <span data-bind="text:text">
  </span>
</p>

我什至不确定我想要实现的目标是否可行,但我想我需要映射,但我无法完成这项工作,

这是我的一些尝试,也许有助于更好地理解我的问题, http://jsfiddle.net/sureyyauslu/2wTjy/6/

提前非常感谢...

【问题讨论】:

    标签: knockout.js knockout-mapping-plugin knockout-2.0


    【解决方案1】:

    问题是你有一个 p 标签嵌套在另一个标签中。模板引擎无法解析此错误标记。

    当我认为你想要另一个 foreach 时,你也在使用 with 绑定。

    <p data-bind="foreach:sentences">
            <span data-bind="text:id"></span>
            <span data-bind="foreach:words">
                <span data-bind="text:text"></span>                   
            </span>
    </p>
    

    最后可以将句子模型简化为

    var mySentenceModel = function(data) {
        var self = this;
        ko.mapping.fromJS(data, wordMapping, self);
    }
    

    您不需要定义 id 等,因为这一切都由映射插件处理。

    http://jsfiddle.net/madcapnmckay/6hMA3/

    希望这会有所帮助。

    【讨论】:

    • @SureyyaUslu - 没问题。如果您不介意,请将此标记为答案。
    猜你喜欢
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 2012-02-08
    • 2015-03-29
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    相关资源
    最近更新 更多