Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 与x27之间的差异;助手'';RegisterHelper';和';RegisterBoundHelper';?_Javascript_Ember.js_Handlebars.js - Fatal编程技术网

Javascript 与x27之间的差异;助手'';RegisterHelper';和';RegisterBoundHelper';?

Javascript 与x27之间的差异;助手'';RegisterHelper';和';RegisterBoundHelper';?,javascript,ember.js,handlebars.js,Javascript,Ember.js,Handlebars.js,正如标题所示,我正在寻找上述helper创建函数与Ember.js在使用上的差异 助手(来自Ember.js API文档): 助手(名称、功能、从属键) 注册绑定辅助对象或自定义视图辅助对象 示例: Ember.Handlebars.helper('capitalize_h', function(value) { return value.toUpperCase(); }); Handlebars.registerHelper('capitalize_rh', function(value

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

  • 助手(来自Ember.js API文档):

    助手(名称、功能、从属键)

    注册绑定辅助对象或自定义视图辅助对象

    示例:

    Ember.Handlebars.helper('capitalize_h', function(value) {
      return value.toUpperCase();
    });
    
    Handlebars.registerHelper('capitalize_rh', function(value) {
      return value.toUpperCase();
    });
    
    Ember.Handlebars.registerBoundHelper('capitalize_rbh', function(value) {
      return value.toUpperCase();
    });
    
  • RegisterHelper(来自handlebar.js):

    示例:

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

    示例:

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

  • 通过使用3,我发现:

  • Ember的助手(helper和registerBoundHelper)也可以处理模型的属性

    例如:

    Ember.Handlebars.helper('capitalize_h', function(value) {
      return value.toUpperCase();
    });
    
    Handlebars.registerHelper('capitalize_rh', function(value) {
      return value.toUpperCase();
    });
    
    Ember.Handlebars.registerBoundHelper('capitalize_rbh', function(value) {
      return value.toUpperCase();
    });
    
    假设模型的属性名的值为“Vageesh”,那么下面将提供相同的结果,即“Vageesh”:

    {{ capitalize_h name }} 
    

  • 但是,手柄“注册助手”不会以上述方式工作,即结果将为“名称”:

    {{ capitalize_rh name }}
    

  • 那么,在用法上是否还有其他区别,或者这是唯一的区别

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

    Ember.handlebar.helper和Ember.handlebar.registerBoundHelper使用特定于EmberJS的功能扩展registerHelper Handlebar方法,作为数据绑定或视图创建

    创建绑定辅助对象

    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方法,该方法的函数参数接受以下格式:

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

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

    Ember.handlebar.registerBoundHelper将在基础数据更改时重新呈现


    当基础数据更改时,Ember.Handlebar.registerHelper将不会重新渲染

    Ember.handlebar.helper是Ember.handlebar.registerBoundHelper或Ember.handlebar.registerHelper的别名,具体取决于参数中传递的内容。如果尝试创建自定义视图辅助对象,则Ember.handlebar.helper将在内部调用Ember.handlebar.registerHelper,否则,它将在内部调用Ember.handlebar.registerBoundHelper。在您的示例中(以及大多数用例),可以考虑“帮助器”与“RealStestEngulelHelp'”:

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

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

    好的,那么直接访问把手助手是“不”吗?另外,Ember'helper'和'registerBoundHelper'之间有什么区别?区别在于'registerBoundHelper'在数据更改时自动重新呈现您的内容。正如我所说的,如果您使用registerHelper,您将需要实现它。查看Ember Handlebar包以查看一些内置的帮助器实现。有一些复杂的场景BoundHelper无法工作,因此您需要使用RegisterHelperHanks实现您的helper以获得解释。这增加了@ppcano的回复,有助于消除差异。:)