2013-03-14 120 views
0

可以說我有這個「模式」添加和刪除模板

var lists = [ 
    { 

    title:   'Default title', 
    image:   '/img/default.jpeg', 
    section:  [ 
         { name: 'Default Name', 
          description: 'Default Description' 
         } 
        ], 
    activity:  ['default'] 
    } 
]; 

這裏是視圖模板

<template name="main_list_view"> 
    {{#each list.section}} 
     {{> section}} 
    {{/each}} 
    <a id="addSection" href='#'>Add Section</a> 
</template> 

<template name="section"> 
    <li>{{section.name}}</li> 
    <li>{{section.description}}</li> 
    <a class="deleteSection" href='#'>Delete Section</a> 
</template> 

我需要幫助瓦特爲增加更多的部分,並刪除特定部分的邏輯收集。

我檢查了mongoDB,看起來像我必須使用addToset和$ unset來更新模型,但我真的只想從視圖中刪除它們,因爲我希望默認模型始終保持不變。

那麼,當用戶單擊添加內容並刪除用戶單擊刪除時的特定視圖時,如何刪除並向視圖添加模板?有沒有Meteor的方式來做到這一點?因此,用戶點擊addContent,如果點擊被移除,則會呈現或移除新的部分模板。

回答

0

刪除一個應該很簡單。首先,它可能有助於增加該部分的ID在你的刪除鏈接:

<a data-id="{{section._id}}" class="deleteSection" href='#'>Delete Section</a>

Template.section.events({ 
    'click a.deleteSection': function(evt) { 
    Sections.remove($(evt.target).data('id')); 
    } 
}); 

添加一個是一個不同的故事,因爲它取決於你想要當您單擊要發生的事情addSection鏈接。該鏈接是否會呈現一個表單,以便在提交時創建新的Section?或者該鏈接的處理程序是否創建了一個Section對象並填充值?

編輯

有人指出,Sections不是一個集合。我應該看到這一點。把它變成一個集合將是處理這個問題的一個顯而易見的方法。因此,而不是:

{{#each list.section}} 
     {{> section}} 
    {{/each}} 

你必須:

{{#each sections list._id}} 
    {{> section}} 
{{/each}} 

而在你的js文件:

Template.main_list_view.helpers({ 
    sections: function(list_id) { 
    return Sections.find({ list_id: list_id }); 
    } 
}); 

或者,你可以移動 「部分」 模板到父然後你可以在鏈接上添加list_id作爲數據屬性::

{{#each list.section}} 
    <li>{{name}}</li> 
    <li>{{description}}</li> 
    <a data-id="{{list._id}}" data-name="{{name}}" data-description="{{description}}" class="deleteSection" href="#">Delete Section</a> 
{{/each}} 

然後在您的js文件:

Template.section.events({ 
    'click a.deleteSection': function(evt) { 
    var list = Lists.find($(evt.target).data('id')); 
    var section = { name: $(evt.target).data('name'), description: $(evt.target).data('description') }; 
    sections = list.sections; 
    sections.splice(sections.indexOf(section), 1); 
    Lists.update(list._id, $set: { sections: sections }); 
    } 
}); 
+0

是,添加將添加一個新的部分填寫 – Nonyck 2013-03-18 09:38:53

+0

你的答案是沒有@samo工作的價值觀,導致節不是一個集合,你不能叫Sections.remove – Nonyck 2013-03-19 20:29:39

+0

它就像嵌套模型,沒有人有嵌套模型w meteorjs的好例子嗎? – Nonyck 2013-03-19 20:31:30