Ember.js 余烬车把辅助视图未更新

Ember.js 余烬车把辅助视图未更新,ember.js,handlebars.js,Ember.js,Handlebars.js,我正在尝试使用Handlebars辅助对象,但是辅助对象视图没有得到更新 这个观点, <script type="text/x-handlebars"> {{#view App.NumberView}} <button {{action changeNumber}}>Change number</button><br> {{formatNumber view.number}} <br> {{view.numb

我正在尝试使用Handlebars辅助对象,但是辅助对象视图没有得到更新

这个观点,

<script type="text/x-handlebars">
  {{#view App.NumberView}}
    <button {{action changeNumber}}>Change number</button><br>
    {{formatNumber view.number}} <br>
    {{view.number}}
  {{/view}}
</script>​
​ jsfiddle中的实时示例


有什么问题吗?

您正在寻找一个绑定的助手,它目前还不存在。这里有一个简单而相关的讨论

您正在寻找一个绑定的助手,它目前还不存在。这里有一个简单而相关的讨论

因为余烬中的把手辅助对象不是绑定辅助对象。因此,您可以实例化一个辅助视图来完成以下操作:

HTML:

此链接很有用:来自@Jo Liss

因为余烬中的把手辅助对象不是绑定辅助对象。因此,您可以实例化一个辅助视图来完成以下操作:

HTML:

此链接很有用:来自@Jo Liss

谢谢,这个看起来不错。但是如何在帮助器中获取选项。我想做一些事情,比如
{{formatNumber view.number formatOpt=“arg”}
。我试图将该选项传递给inlineFormatter,但无法使其工作。使用{{formatNumber view.number formatOpt=“arg”},您可以使用options.hash.formatOpt访问它。我只能在registerViewHelper中访问options.hash,但不能在final helper方法中访问。选中此复选框-此完全相同的代码不适用于新版本的Ember(Ember-1.0.pre.min.js)。这是一个证明,在管理资源中,您应该在使用Emberjs之前移动把手。会有用的。谢谢,这看起来不错。但是如何在帮助器中获取选项。我想做一些事情,比如
{{formatNumber view.number formatOpt=“arg”}
。我试图将该选项传递给inlineFormatter,但无法使其工作。使用{{formatNumber view.number formatOpt=“arg”},您可以使用options.hash.formatOpt访问它。我只能在registerViewHelper中访问options.hash,但不能在final helper方法中访问。选中此复选框-此完全相同的代码不适用于新版本的Ember(Ember-1.0.pre.min.js)。这是一个证明,在管理资源中,您应该在使用Emberjs之前移动把手。会有用的。
App = Ember.Application.create({});

App.NumberView = Ember.View.extend({
  number: 5,
  changeNumber: function(e) {
    this.set('number', this.get('number') + 1);
  }    
});

Em.Handlebars.registerHelper('formatNumber', function(timePath, options) {
  var number = Em.Handlebars.getPath(this, timePath, options);
  return new Handlebars.SafeString("Formated number: " + number);
});
<script type="text/x-handlebars">
    {{#view App.NumberView}}
        <button {{action changeNumber}}>Change number</button><br>
        {{formatNumber view.number}} <br>
        {{view.number}}
    {{/view}}
</script>​
App = Ember.Application.create({});

App.NumberView = Ember.View.extend({
    number: 5,
    changeNumber: function(e) {
        this.set('number', this.get('number') + 1);
    }    
});


App.registerViewHelper = function(name, view) {
  Ember.Handlebars.registerHelper(name, function(property, options) {
    options.hash.contentBinding = property;
    return Ember.Handlebars.helpers.view.call(this, view, options);
  });
};


inlineFormatter = function(fn) {
  return Ember.View.extend({
    tagName: 'span',

    template: Ember.Handlebars.compile('{{view.formattedContent}}'),

    formattedContent: (function() {
      if (this.get('content') != null) {
        return fn(this.get('content'));
      }
    }).property('content')
  });
};


App.registerViewHelper('formatNumber', inlineFormatter(function(content) {

    return new Handlebars.SafeString("Formated number: " + content);
}));