Marionette.js - 从 itemView 访问行为函数
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 */
}
});
如您所见,我在另一个内部触发了一个节点方法。在 behavior
中移动一个函数后,我需要做同样的事情
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 */
}
});
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 未定义
在您看来,您可以使用 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
起初我有 Marionette.js itemView,里面有很多功能。所以,我想将其中一些移动到行为。但是我遇到了一个大问题——我不能直接使用 itemView 中的行为函数。这是我的初始代码:
var NodeView = Marionette.ItemView.extend({
showDefault: function(){
/* some code */
this.showOther();
},
// Initiates
showOther: function(){
/* some code */
}
});
如您所见,我在另一个内部触发了一个节点方法。在 behavior
中移动一个函数后,我需要做同样的事情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 */
}
});
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
在您看来,您可以使用 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