【问题标题】:RequireJS + BackboneJS - connect modulesRequireJS + BackboneJS - 连接模块
【发布时间】:2012-12-23 21:10:26
【问题描述】:

当我尝试连接两个包含两个不同 BackboneJS 视图的模块时遇到问题。

在 RequireJS 的这个模块中包含一个主干视图。 我需要在这个模块中,参考另一个模块中的另一个主干视图。 我修改了代码以使其更简单

define (["jquery","backbone","collections/controlSearchCollection","views/currentPlaylist","jqueryUI"], function($, Backbone, controlSearchMusic, currentPlaylist){

var searchModule = Backbone.View.extend({
    el: "#containerSearch",

    initialize: function () {
        this.collection = new controlSearchMusic();
    },
    events:{
        "dblclick li":"select"
    },
    select: function(element){
        var trackJSON ={};
        trackJSON["id"]= "playCloud_"+$(element.target).attr("id");
        currentPlaylist.collection.add(trackJSON);   <--- Here is where this error

    }
});

return searchModule;
});

在这里,我的另一个 RequireJS 模块包含一个主干JS 的视图。我需要从第一个模块添加到 JSON。

define (["jquery","backbone","collections/controlCurrentPlaylistCollection","jqueryUI"], function($, Backbone, controlCurrentPlaylist){

    var currentPlaylist = Backbone.View.extend({
        el: "#currentPlaylist",

        initialize: function(){
            this.collection = new controlCurrentPlaylist();
            this.collection.on("add", this.executeFunction, this);

        },
        executeFunction: function(song){
            alert(song.toSource());
        }
    });
    return currentPlaylist;
});

这两个模块在 app.js 中实例化

有人可以帮助我吗?谢谢你!

【问题讨论】:

  • 也许你应该在 Chrome 中测试并在第二个模块中设置断点。加载模块时是否没有错误?
  • 您好,感谢您这么快回答。模块加载没有错误。错误在于没有引用对象 currentPlaylist。萤火虫告诉我 CurrentePlaylist 未定义

标签: backbone.js requirejs


【解决方案1】:

如果没有确切的错误很难判断,但看起来您还没有创建currentPlaylist 的实例。所以currentPlaylist.collection 是未定义的,当您尝试对其调用add 函数时会导致错误。

你可以试试这个:

var cpl = new currentPlaylist(); // create instance
cpl.collection.add(trackJSON);  // cpl.collection should be initialized here

【讨论】:

  • 嗨 micha,我试过你的建议,效果很好,但我开始怀疑。这种方式不依赖于第一个开始的模块吗?我需要两个独立的模块。感谢您这么快回答。
  • 这取决于你想做什么。如果您想在具有不同数据的另一个模块中使用currentPlaylist 视图,您可以创建另一个currentPlaylist 实例。如果您希望多个模块可以访问同一个视图实例(使用相同的数据),您可以在 currentPlaylist 模块中创建实例并返回实例而不是定义。
  • 我见过几次返回实例,但不知道这个服务可以用于多个视图可以使用相同的数据。这正是我所需要的。你告诉我的对我有很大帮助。非常感谢
猜你喜欢
  • 2014-02-11
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 2012-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多