Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干路由器创建多个视图,导致多个事件绑定到同一个视图_Javascript_Backbone.js_Backbone Events - Fatal编程技术网

Javascript 主干路由器创建多个视图,导致多个事件绑定到同一个视图

Javascript 主干路由器创建多个视图,导致多个事件绑定到同一个视图,javascript,backbone.js,backbone-events,Javascript,Backbone.js,Backbone Events,我不熟悉backbone.js,试图了解路由、视图等是如何工作的,现在我遇到了为同一视图构建事件的问题。这里有一个剪辑,它将告诉你我的确切意思 这就是我的主干路由器的样子 var Router = Backbone.Router.extend({ routes: { "pages": "pages", } pages: function () { var page_view = new PageView(); } }); 因此,

我不熟悉backbone.js,试图了解路由、视图等是如何工作的,现在我遇到了为同一视图构建事件的问题。这里有一个剪辑,它将告诉你我的确切意思

这就是我的主干路由器的样子

var Router = Backbone.Router.extend({

    routes: {
        "pages": "pages",
    }
    pages: function () {
        var page_view = new PageView();
    }
});
因此,当我点击Pages链接时,我创建了一个新的PageView,这就是我正在使用的代码

PageView = Backbone.View.extend({
    el: $("#content"),
    initialize: function () {
        $.ajax({
            url: '/pages',
            success: function (data) {
                $("#content").html(data);
            }
        });
    },
    events: {
        "click td input[type=checkbox]": "updatePublishedStatus"
    },
    updatePublishedStatus: function (event) {
        console.log('update publish status');
    }
});

我想这是相当基本的,但正如你在剪辑中看到的,每次我导航到/页面时,我都会在复选框中注册另一个事件

移动
var page\u view=new PageView()
Router.pages()之外

PageView.initialize()
success回调函数将
data
保存到变量。在
页面视图中或在模型中

render
函数添加到设置
$(“#内容”).html(数据)的
PageView


Router.pages()中调用
page\u view.render()

这里有一些问题

  • 您的视频表明页面是一个集合,
    页面
    <代码>页面
  • 主干。模型
    具有页面名称、slug、published等属性。。。如果你没有,那会很痛的。您不应该只加载一些html并将其推送到DOM中,这违背了使用主干网的全部目的
  • 如果您确实为页面创建了一个模型,它将具有一个视图。然后您的页面/路线将显示收藏页面等的视图
  • 您将不在视图的initialize中获取数据,而是通过执行
    pages.fetch()其中页面是
    页面
    集合的实例。这可能发生在您甚至初始化路由器之前
  • 通过视图更改属性时,将更新各个模型
  • 作为旁白:在初始化时获取数据并不好。您可以在实际获取数据之前调用render(),这一点都不好玩。
    也可以使用视图的$el来代替执行
    $('#content')
    。如
    this.$el.html(…)

    在这种情况下,可以在获取数据之前调用render。好的,我知道应该使用模型和集合。我使用asp.NETMVC,当调用/pages时,我只返回一个包含所有html和数据的部分视图,因为我还没有弄清楚如果不使用部分视图,如何使它在启用或不启用javascript的情况下工作。您是否有过使用asp.net mvc创建富web应用程序的经验,该应用程序也没有架构性,并且在不启用javascript的情况下工作?没有人抱歉,我没有,我喜欢我的python;)但是如果你的目标是开发一个不依赖javascript的应用程序,而忽略了在主干视图后面有模型的想法,那么你首先应该重新考虑使用主干。。。我想我会想出一个解决方案,我同意你的观点,我应该使用模型和集合。在获取数据之前渲染有那么糟糕吗?如果视图呈现为空,然后在触发“重置”事件时重新呈现或更新,这并不是那么糟糕。@PaulHoenecke不,这是次要的,但至少需要绑定才能重置。