繁体   English   中英

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

如你所见,我在另一个内部触发了一个节点方法。 我在行为中移动一个功能后需要做同样的事情

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

是否在相同的文件中定义了NodeViewNodeBehavior

您需要在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM