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 などを使用する必要があるように見えますが、実際にはそれらをビューから削除したいだけなので、デフォルトのモデルは常に同じままにしておきたいと考えています。

では、ユーザーが Addcontent をクリックしたときにテンプレートを削除してビューに追加し、ユーザーが remove をクリックしたときに特定のビューを削除するにはどうすればよいでしょうか。それを行う流星の方法はありますか?したがって、ユーザーが addContent をクリックすると、新しいセクション テンプレートが表示されるか、削除をクリックすると削除されます。

4

1 に答える 1

0

1つを削除するのは簡単なはずです。まず、削除リンクにセクションの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 });
  }
});
于 2013-03-15T19:36:05.920 に答える