1

升级到backbone.js 0.9.2 后,我在让主干代码正常工作方面遇到了很多问题。我遇到的一个问题是在窗口中引用一个变量。它工作得很好,就像下面的 0.5.3 中的精简代码

没关系 this.namespace.blaaaa 位,基本上我只有一个命名空间包装器,负责将对象放在命名空间中。我在这里追求的是为什么我不能从页面视图内部的 PageDisplay 视图内部访问 myApp。看到 myApp 是一个窗口变量,我不应该通过直接调用它来访问它。

myApp.js

$(window).load(function() {
    myApp = new Page({ el: $("body"), scroll: $(window).scrollTop() });
})

页面.js

this.namespace.Page = Backbone.View.extend({
    initialize: function( ) {
        this.pageDisplay = new PageDisplay({ 
            el: $("#showBrowser")
        });
    }
});

页面显示.js

this.namespace.PageDisplay = Backbone.View.extend({
    initialize: function( ) {
        myApp.model.set("bla");
    }
});
4

2 回答 2

2

我猜你的$(window).load()处理程序:

$(window).load(function() {
    myApp = new Page({ el: $("body"), scroll: $(window).scrollTop() });
})

将失败,因为在调用它时没有Page范围,并且充其量myAppundefined在您稍后尝试时myApp.model.set()出现。您在命名空间内定义一个Page

this.namespace.Page = Backbone.View.extend({ /*...*/ });

并且因为this大概是window在那种情况下,你会有namespace.Page但没有Page. 您将在namespace.Page初始化函数中遇到同样的问题:

this.pageDisplay = new PageDisplay({ 
    el: $("#showBrowser")
});

你会有namespace.PageDisplay但没有PageDisplay

您应该参考namespace.Pageandnamespace.PageDisplay而不是简单的Pageand PageDisplay。我还建议您this在定义视图时放弃,这只会导致混淆并打开错误窗口。

于 2012-04-27T22:30:15.013 回答
0

我会把窗户当作一个视图,因为它就是这样。然后,您将拥有与窗口相同的行为,但不需要渲染方法(除非有人能想到一个?)。这样,您可以运行这些事件以离开窗口并返回,或调整整个窗口的大小。这是我所做的:

var WindowView = Backbone.View.extend({
    "el": window,
    "events": {
        "resize": "onResize"
        "focus": "onFocus"
        "blur": "onBlur"
    },
    "onResize": function (ev) {

    },
    "onFocus": function (ev) {

    },
    "onBlur": function (ev) {

    }
});

然后你只需像标准视图一样创建一个新视图。

于 2013-02-05T22:50:09.163 回答