gpt4 book ai didi

backbone.js - 构建我的backbone.js 应用程序

转载 作者:行者123 更新时间:2023-12-01 09:35:55 25 4
gpt4 key购买 nike

我正在使用 Require.js 创建一个 Backbone.js 应用程序。每个 View 文件对应一个资源(例如“新闻”)。在每个 View 文件中,我声明了一个主干查看每个操作(“索引”、"new"等)。在我收到的 View 文件的底部来自路由器的必要信息,然后决定实例化哪个 View (基于从路由器传入的信息)。

这一切都很好,但它需要大量代码并且似乎不是“backbone.js 方式”。一方面,我依靠 url 来管理状态。另一方面,我没有使用 _.bind ,它出现在很多backbone.js 示例中。换句话说,我认为我做的不对,而且我的代码库有异味……关于如何更好地构建我的应用程序有什么想法吗?

路由器.js

define([
'jquery',
'underscore',
'backbone',
'views/news'],
function($, _, Backbone, newsView){
var AppRouter = Backbone.Router.extend({
routes:{
'news':'news',
'news/:action':'news',
'news/:action/:id':'news'
},

news: function(action, id){
newsView(this, action, id).render();
}
});


var intialize = function(){
new AppRouter;
Backbone.history.start()
};

return{
initialize: initialize;
};
}

news.js ('views/news')

define([
'jquery',
'underscore',
'backbone',
'collections/news',
'text!templates/news/index.html',
'text!templates/news/form.html'

], function($, _, Backbone, newsCollection, newsIndexTemplate, newsFormTemplate){

var indexNewsView = Backbone.View.extend({
el: $("#content"),

initialize: function(router){
...
},

render: function(){
...
}
});

var newNewsView = Backbone.View.extend({
el: $("#modal"),

render: function(){
...
}
});

...

/*
* SUB ROUTER ACTIONS
*/

var defaultAction = function(router){
return new newsIndexView(router);
}

var subRouter = {
undefined: function(router){return defaultAction(router);},

'index': function(router){ return defaultAction(router);},

'new': function(){
return new newNewsView()
},

'create': function(router){
unsavedModel = {
title : $(".modal-body form input[name=title]").val(),
body : $(".modal-body form textarea").val()
};
return new createNewsView(router, unsavedModel);
},

'edit': function(router, id){
return new editNewsView(router, id);
},

'update': function(router, id){
unsavedModel = {
title : $(".modal-body form input[name=title]").val(),
body : $(".modal-body form textarea").val()
};

return new updateNewsView(router, id, unsavedModel);
},
}

return function(router, action, id){
var re = /^(index)$|^(edit)$|^(update)$|^(new)$|^(create)$/
if(action != undefined && !re.test(action)){
router.navigate('/news',true);
}
return subRouter[action](router, id);
}


});

最佳答案

虽然我觉得强调没有真正的“Backbone.js 方式”很重要,但您似乎在复制 Backbone 应该为您做的工作。

我同意为应用程序的每个独立部分使用专门的路由器是有意义的。但乍一看,您在“子路由器”部分所做的只是重新创建 Backbone.Router 功能。您的 AppRouter 根本不需要处理 /news 网址;您可以使用特定于新闻的路由初始化 NewsRouter,它将处理与新闻相关的 URL:

var NewsRouter = Backbone.Router.extend({
routes:{
'news': 'index',
'news/create': 'create',
'news/update/:id': 'update',
'news/edit/:id': 'edit'
},

index: function() { ... },

create: function() { ... },

// etc
});

只要在你调用 Backbone.history.start() 之前初始化它,它就会捕获其路由的 URL 请求,而你永远不必处理 AppRouter。您也不需要处理 View 底部的丑陋代码 - 这基本上只是在为您做核心 Backbone.Router 所做的事情。

关于backbone.js - 构建我的backbone.js 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8043149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com