2012-09-26 34 views
2

我正在嘗試使用Handlebars幫助,但幫助視圖未得到更新。Ember Handlebars幫助視圖未更新

的觀點,

<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); 
    }  
}); 

Em.Handlebars.registerHelper('formatNumber', function(timePath, options) { 
    var number = Em.Handlebars.getPath(this, timePath, options); 
    return new Handlebars.SafeString("Formated number: " + number); 
}); 

中的jsfiddle http://jsfiddle.net/LP7Hz/1/

那麼,什麼是錯的活生生的例子?

回答

3

因爲把手傭工餘燼未結合的幫手。從@Jo http://techblog.fundinggates.com/blog/2012/08/ember-handlebars-helpers-bound-and-unbound/:所以,你可以實例化輔助視圖是這樣做的提琴:

http://jsfiddle.net/secretlm/qfNJw/2/

HTML:

<script type="text/x-handlebars"> 
    {{#view App.NumberView}} 
     <button {{action changeNumber}}>Change number</button><br> 
     {{formatNumber view.number}} <br> 
     {{view.number}} 
    {{/view}} 
</script>​ 

的Javascript:

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); 
})); 

這個環節是非常有用的Liss

+0

謝謝,th看起來不錯。但我怎樣才能在助手中獲得選項。我想做一些事情,比如'{{formatNumber view.number formatOpt =「arg」}}'。我試圖將該選項傳遞給inlineFormatter,但無法使其工作。 –

+0

With {{formatNumber view.number formatOpt =「arg」}},您可以使用options.hash.formatOpt來訪問它。 – secretlm

+0

我只能訪問registerViewHelper中的options.hash,但不能在最終的幫助器方法中訪問。勾選此http://jsfiddle.net/qfNJw/25/ –

1

您正在尋找一個不存在的綁定助手。有一個Pull Request和相關的討論。