![](/img/trans.png)
[英]How to access Backbone.Model methods from Marionette.js ItemView template?
[英]Marionette.js - access to behavior functions from itemView
起初,我有Marionette.js itemView,里面有很多功能。 因此,我想将其中一些移至“行为”。 但是我遇到了一个大问题-我不能直接使用itemView的行为函数。 这是我的初始代码:
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 */
}
});
从您的角度来看,您可以使用triggerMethod
手动调用行为中的方法
例如,这是一个附加了Modal
行为的模拟视图。 假设初始化后,我们想对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
是否在相同的文件中定义了NodeView
和NodeBehavior
?
您需要在NodeView上方定义NodeBehavior:
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 ? */
}
});
否则,当您设置behaviorClass: NodeBehavior
时,未定义NodeBehavior behaviorClass: NodeBehavior
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.