2016-04-27 42 views
0

起初,我有Marionette.js itemView裏面有很多功能。所以,我想將其中的一些移到Behavior。但是我遇到了很大的問題 - 我無法直接使用itemView中的行爲函數。這是我的初始代碼:Marionette.js - 從項目訪問行爲功能查看

var NodeView = Marionette.ItemView.extend({ 
    showDefault: function(){ 
     /* some code */ 
     this.showOther(); 
    }, 
    // Initiates 
    showOther: function(){ 
     /* some code */  
    } 
}); 

因爲你看到我觸發一個節點內的方法。我需要移動一個函數內部行爲

var NodeView = Marionette.ItemView.extend({ 
    behaviors: { 
     NodeBehavior: { 
      behaviorClass: NodeBehavior 
     } 
    }, 
    showDefault: function(){ 
     /* some code */ 
     this.showOther(); /* how can i trigger this function ? */ 
    }   
}); 

var NodeBehavior = Marionette.Behavior.extend({ 
    showOther : function(){ 
     /* some code */  
    }  
}); 

回答

1

從你的觀點,你可以手動調用行爲中的方法

var NodeBehavior = Marionette.Behavior.extend({ 
    showOther : function(){ 
     /* some code */  
    }  
}); 

var NodeView = Marionette.ItemView.extend({ 
    behaviors: { 
     NodeBehavior: { 
      behaviorClass: NodeBehavior 
     } 
    }, 
    showDefault: function(){ 
     /* some code */ 
     this.showOther(); /* how can i trigger this function ? */ 
    }   
}); 

否則,NodeBehavior沒有定義通過使用triggerMethod

例如,以下是附有Modal行爲的模擬視圖。假設初始化,我們想調用onSayWho方法對模態行爲。下面的代碼演示,你會怎麼做:

define([ 
    'marionette', 
    'behaviors/Modal', 
    'tpl!templates/tpl.html' 
], function(
    Mn, 
    Modal, 
    tpl 
) { 
    var view = Mn.LayoutView.extend({ 
    template: tpl, 

    behaviors: { 
     Modal: { 
      behaviorClass: Modal 
     } 
    }, 

    initialize: function(options) { 
     var data = 'Mike Jones!'; 
     this.triggerMethod('sayWho', data); 
    }, 
}); 

return view; 
}); 

這裏將是模態行爲的代碼:

define([ 
    'marionette' 
], function (
    Mn 
) { 
    var Modal = Mn.Behavior.extend({ 
    onSayWho: function(name) { 
     console.log('who? ' + name); 
    } 
}); 

return Modal; 
}); 

一定要注意的是,行爲的函數名需要有on之前。 IE瀏覽器調用this.triggerMethod('sayWho', data),而行爲中的實際函數名稱是onSayWho

+0

謝謝你,我會試試這個方法 –

0

就是在這樣的同一個文件中定義的NodeViewNodeBehavior後做的一樣嗎?

您需要將您的NodeBehavior您NodeView上述定義:當你設置behaviorClass: NodeBehavior

+0

感謝您的答案。我使用requirejs:我的itemview只有在行爲完成後才啓動 –