从视图访问木偶应用程序(使用Require.js)

D_N*_*ish 1 requirejs marionette

我正在尝试与它的一些观点共享木偶应用程序.我在这里阅读了wiki ,但这个例子给我留下了一个问题.

我有一个带有几个视图的文件,它们都需要使用请求/响应系统和可能的命令.我不想var MyApp = require('app');在文件中的所有视图中执行此操作.我想出了以下内容,但我认为可能有更好的方法.

例:

//Views.js
define( ["marionette"], function (Marionette) {
var App = function(){
    return require('app');
};

var ExampleItemView = Marionette.ItemView.extend({
    initialize: function(){
        App().request("getInfo", "aboutStuff");
    }
});

return Marionette.CollectionView.extend({
    itemView: ExampleItemView,
    initialize: function(){
        App().request("getInfo", "aboutStuff");
    }
});
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?

Cre*_*ers 5

我绝对不会将你app注入你的视图,因为它可以创建循环依赖,这总是代码味道(无论它们是否可以解决)到目前为止,简单的解决方案是创建一个单独的(单例)reqres对象,它是由应用程序处理并注入视图.

//reqres.js
define(['backbone.wreqr'], function( Wreqr ){
    return new Wreqr.RequestResponse();
});

//app
define(['reqres'], function(reqres){
    reqres.setHandlers({
        'getInfo' : function(){
            return 'foo';
        }
    });
});

//Views.js
define( ["marionette", "reqres"], function (Marionette, reqres) {
var ExampleItemView = Marionette.ItemView.extend({
    initialize: function(){
        reqres.request("getInfo", "aboutStuff");
    }
});

return Marionette.CollectionView.extend({
    itemView: ExampleItemView,
    initialize: function(){
        reqres.request("getInfo", "aboutStuff");
    }
});
Run Code Online (Sandbox Code Playgroud)