2014-04-23 64 views
0

是否有一種使用自定義手柄條助手內的Ember.Mixin對象中定義的方法的優雅方式?在自定義手柄條助手中訪問Ember.Mixin

例如,在我來說,我有一個mixin,App.Format其中包含了一堆用來格式化數字,日期,ECT不同的方法,我想提出一些方法直接從通過自定義傭工模板訪問(例如{{formatNumber 450324}} )。我不直接將這個方法直接放在幫助器而不是mixin中,原因是我還需要這些方法在控制器,視圖等等中可用。爲了保持我的代碼乾爽,我絕對不想在mixin和helpers中有重複的代碼。

是否有任何規範的,「乾淨」的方式來完成這個,或者我只是完全錯誤地考慮它?

編輯:這裏是一個jsbin更好地說明問題:

http://emberjs.jsbin.com/wunug/1/edit?html,js,output(看看33-37行)

+0

我將創建一個使用您的混入一個幫手。 Doc可在http://emberjs.com/guides/templates/writing-helpers/ – ppcano

+0

@ppcano右鍵,這就是我試圖訪問我的mixin,我用'Ember.Handlebars創建的自定義助手。助手()'。我遇到的麻煩是我應該如何從助手函數中訪問/實例化mixin,以便我可以使用它的方法。 –

+0

App.Format在輔助模塊中不可用嗎?在這種情況下,這是模塊加載器結構的問題,否則請寫一個示例(http://emberjs.jsbin.com/)以幫助您更好地完成工作。 – ppcano

回答

4

的方法Mixin.apply使工作。

Ember.Handlebars.helper('formatNumber', function(num, decimals) { 
    var format = App.Format.apply({}); 
    return format.formatNumber(num, decimals || 2); 
}); 
+0

啊,完美!當我在瀏覽api文檔時,我實際上瀏覽了apply()方法,但是我猜它沒有描述,導致我忽略它。 :) –

+1

問題:每次助手被調用時,是不是會實例化Mixin?這通常不會很理想。 –

0

我使用Ember 2.12,這是我爲我工作的。希望這有助於某人。

創建一個名爲格式化新的mixin:

../mixins/formatters.js

import Ember from 'ember'; 

    export default Ember.Mixin.create({ 
     shortDate: function(date) { 
      return `Date should be formatted: ${date}`; 
     } 
    }); 

創建一個新的幫手進口上述混入並使用它。

../helpers/short-date.js

import Ember from 'ember'; 
    import FormatDateMixin from '../mixins/formatters'; 

    export default Ember.Helper.extend(FormatDateMixin, { 
     compute: function(params /*, hash*/) { 
     return this.shortDate(params); 
     } 
    }); 

在模板* .hbs文件,請使用如下的幫手:

{{short-date today}}   
相關問題