单击时,流星行结果会扩展

时间:2014-05-11 13:45:15

标签: templates meteor expand

我想让每个结果都可以展开,以显示特定项目的额外细节或编辑表单。

寻找类似的问题,我发现了这一点 Template reuse in meteor

我遇到的问题是如果我展开一个会扩展每个结果:(

这是我使用atm的代码:

$(document).ready(function(){
  Session.set('edit', false); 
});


Template.editdisplay.events({
  'click .edit' : function(){
    Session.set('edit', true); 
  } 
});

Template.editdisplay.edit = function(){
  if(Session.get('edit')){
    return true; 
  } 
  else{
   return false;
  } 
}; 

HTML:

<template name="editdisplay">
  result..
  {{#if edit}}
    {{> editform}}
  {{/if}}
</template>

2 个答案:

答案 0 :(得分:0)

那么,您使用一个反应变量来控制每个项目的扩展 - 您期望的其他行为是什么?您需要为每个模板实例创建单独的变量。最简单的例子:

Template.editdisplay.events({
  'click .edit': function(e, t) {
    Session.set('edit-' + t.data._id, true); 
  }, 
});

Template.editdisplay.edit = function() {
  return !!Session.get('edit-' + this._id);
}; 

答案 1 :(得分:0)

虽然它不是最优雅的解决方案,但您可以将当前编辑项目的ID存储在会话变量中,并使用以下内容:

{{#if equals _id editingId}}
  {{> editForm}}
{{/if}}

并且js看起来像这样:

Template.editDisplay.events({
  'click .edit':function(event, template)->
     Session.set("editingId", template.data._id);
})

Template.editDisplay.editingId = function(){
  return Session.get("editingId");
}

equals是一个简单的帮手:

UI.registerHelper("equals" , function(val1, val2){
  return val1 === val2;
})

并避免实时更新问题:

Template.editDisplay.created = function(){
  Session.set("editingId");
}