' Helper',' RegisterHelper'之间的区别和' RegisterBoundHelper'?

时间:2014-04-25 07:33:45

标签: javascript ember.js handlebars.js

正如标题所示,我正在寻找上述帮助器创建函数与Ember.js的使用差异。

  1. Helper(来自Ember.js API文档):

      

    helper(name,function,dependentKeys)

         

    注册绑定的帮助程序或自定义视图帮助程序。

    示例:

    Ember.Handlebars.helper('capitalize_h', function(value) {
      return value.toUpperCase();
    });
    
  2. RegisterHelper(From Handlebars.js):

    示例:

    Handlebars.registerHelper('capitalize_rh', function(value) {
      return value.toUpperCase();
    });
    
  3. RegisterBoundHelper(来自Ember.js API文档):

    示例:

    Ember.Handlebars.registerBoundHelper('capitalize_rbh', function(value) {
      return value.toUpperCase();
    });
    

  4. 从使用3开始,我发现:

    1. Ember的助手(helper& registerBoundHelper)也可以在模特的属性上工作,

      例如:

      假设模型的属性名称具有值' Vageesh',那么以下内容将提供相同的结果,即' VAGEESH':

      {{ capitalize_h name }} 
      

      {{ capitalzie_rbh name }}
      
    2. 但是,Handlebars'注册助手'将不会以上述方式工作,即结果将是' NAME':

      {{ capitalize_rh name }}
      

    3. 那么,使用中是否存在其他差异,或者这是唯一的区别?

      另外,在什么情况下建议使用哪种助手创建方法?

2 个答案:

答案 0 :(得分:4)

如果基础数据发生变化,

Ember.Handlebars.registerBoundHelper 将重新呈现。

当基础数据发生变化时,

Ember.Handlebars.registerHelper 将不会重新呈现。

Ember.Handlebars.helper 是Ember.Handlebars.registerBoundHelper或Ember.Handlebars.registerHelper的别名,具体取决于参数中传递的内容。如果您正在尝试创建自定义视图助手,Ember.Handlebars.helper将在内部调用Ember.Handlebars.registerHelper,否则,它将调用Ember.Handlebars.registerBoundHelper。在您的示例中(大多数情况下使用案例),您可以将'helper'视为与'registerBoundHelper'相同:

Ember.Handlebars.helper('capitalize_h', function(value) {
  return value.toUpperCase();
});

...与...相同

Ember.Handlebars.registerBoundHelper('capitalize_h', function(value) {
  return value.toUpperCase();
});  

答案 1 :(得分:2)

Ember.Handlebars.helper Ember.Handlebars.registerBoundHelper 使用EmberJS特定功能扩展 registerHelper 把手方法作为数据绑定或视图创建。

registerBoundHelper 会创建一个绑定帮助器。

Bound helpers behave similarly to regular handlebars helpers, with the added ability to re-render when the underlying data changes.

Ember使用Ember.Handlebars提供Handlebars实例(我认为,不建议您直接访问Handlebars实例),它允许您使用registerHelper方法编写特定的handlebars方法,该方法的函数参数接受以下格式: / p>

Ember.Handlebars.helper('myHelperName', function(property, options) {

});

如果使用registerHelper方法定义助手,则助手将负责观察数据更改并在必要时重新呈现其数据。