2014-04-25 10 views
4

正如标题所示,我正在寻找Ember.js上面的帮助程序创建函数的用法的区别。'Helper','RegisterHelper'和'RegisterBoundHelper'之间的区别?

  1. 助手(从Ember.js API文档):

    帮手(名称,功能,dependentKeys)

    注册绑定助手或自定义视图助手。

    实施例:

    Ember.Handlebars.helper('capitalize_h', function(value) { 
        return value.toUpperCase(); 
    }); 
    
  2. RegisterHelper(来自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(); 
    }); 
    

从使用3,我发现:

  1. Ember的助手(助手& registerBoundHelper)也可以在模型的工作物业,

    例如:

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

    {{ capitalize_h name }} 
    

    而且

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

    {{ capitalize_rh name }} 
    

那么,有没有在使用的任何其他差异或这是唯一的区别?

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

回答

2

Ember.Handlebars.helper and Ember.Handlebars。registerBoundHelper extend registerHelper handlebars方法与EmberJS特有的功能作为数据绑定或视图创建。

registerBoundHelper创建绑定帮助程序。

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

灰烬使可用手把实例与Ember.Handlebars(我想,不建议您直接访问到车把实例),它允许你写具体车把方法与registerHelper方法,其功能参数接受格式:

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

}); 

如果定义使用registerHelper方法你的助手,助手将负责观察数据的变化和重新渲染它的数据,如果有必要的。

+0

好吧,所以直接访问Handlebar帮手是一个'禁忌'? 另外,Ember'helper'和'registerBoundHelper'有什么区别? –

+0

不同之处在于,在数据更改时,“registerBoundHelper”会自动重新呈现您的内容。正如我所说,如果你使用registerHelper,你将需要实现它。检查Ember-Handlebars包以查看一些内置的帮助程序实现。有一些复杂的情况BoundHelper将无法正常工作,所以你需要实现你的帮手registerHelper – ppcano

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。在您的例子(以及大多数使用情况下的这个问题),你可以考虑“帮手”是一样的“registerBoundHelper”:

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

...是一样的...

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

感谢您的解释。这增加了@ppcano的回复,并有助于清除差异。 :) –