2012-03-05 128 views
3

我試圖創建使用淘汰賽映射插件視圖模型,淘汰賽映射分層JS對象

這是對象,基本上是以下在它的話一個句子。

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/

感謝很多提前...

回答

8

的問題是,你有嵌套在另一個AP標籤。模板引擎無法解析這個不正確的標記。

當我想你想要另一個foreach時,你還在使用with binding。

<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/

希望這有助於。

+0

非常感謝你,偉大的工程,你節省了我的時間。 – 2012-03-06 10:18:40

+0

@SureyyaUslu - 沒問題。如果您不介意,請將其標記爲答案。 – madcapnmckay 2012-03-06 16:13:41

+0

簡單而輝煌! – Phil 2013-07-12 11:25:40