1

我有一个迭代实体数组的模板。

我想根据一些逻辑为其中一些实体显示一个“删除”按钮,我只是想了解执行此操作的最佳方法。

实际的删除按钮将使用以下标记呈现,请注意该标记包括对内置操作帮助程序的调用。:

<button class="btn btn-danger" {{action "removeEntityFunctionInController" entitity}}><i class="icon-remove icon-white"></i> Remove</button>

我想用

{{optionalRemoveEntityButton entity}}

我正在尝试创建一个无逻辑的模板,所以我想也许我可以创建一个助手,例如:

Ember.Handlebars.registerHelper('optionalRemoveEntityButton', function(entity, options) {
  logicForDeterminingWhetherToShowView 
  removeEntityButtonView = howDoILoadAViewProgrammatically?
  return removeEntityButtonView;
});

我不明白如何以编程方式加载视图。我想使用一个视图,因为这个助手不仅仅是返回一些简单的标记。它还包括对{{action}}助手的调用。

除非有更好的方法来实现我想要做的事情?

4

1 回答 1

1

我有一个迭代实体数组的模板。我想根据一些逻辑为其中一些实体显示一个“删除”按钮,我只是想了解执行此操作的最佳方法。

这是一个非常常见的用例。这种逻辑的想法是在控制器中。

实际的删除按钮将使用以下标记呈现,请注意该标记包括对内置操作帮助程序的调用。:<button class="btn btn-danger" {{action "removeEntityFunctionInController" entitity}}><i class="icon-remove icon-white"></i> Remove</button>

我想用{{optionalRemoveEntityButton entity}}

我建议您保留原始标记。

除非有更好的方法来实现我想要做的事情?

将逻辑排除在模板之外是一个很好的目标,但通常这并不意味着构建大量的车把助手。通常,当您发现一些在许多视图中重复的显示逻辑时,您只会构建一个助手。

另一种方法是使用{{#if}}助手有条件地显示按钮

{{#if showDeleteButton}}
  <button class="btn btn-danger" {{action "removeEntityFunctionInController" entitity}}><i class="icon-remove icon-white"></i> Remove</button>
{{/if}}

您需要将 ArrayController 的 itemController 属性设置为将包装每个单独项目的控制器(可能是 ObjectController)的名称。然后showDeleteButton在该 itemController 上定义方法。有关设置的详细信息,请参阅Ember.ArrayController文档。

于 2013-02-05T13:17:29.077 回答