我正在尝试学习并制作backbone.marionette应用程序,并有以下2个疑问/问题:
<德尔> 1) 我正在尝试将用户重定向到主页,而不是默认登录页面,如果他已经登录。要检查用户是否已登录我在模型中使用了jquery.cookie并在启动木偶应用程序时使用该模型类检查重定向的位置。 cookie工作正常,我从cookie获取值,但我的应用程序没有路由到主页。我在app start event.App.on上执行此操作(“start”,function(options){var session = new UserSession(); // UserSession是包含jquery.cookie part if(session.authenticated()){的模型console.log(“redirecting ...”); App.trigger(“users:list”); console.log(“redirected”);}}在另一个文件中我有App.addInitializer(函数(选项){new Backbone .Marionette.AppRouter.extend({appRoutes:{“users”:“listUsers”},controller:MyRouteCtlr}}); App.on(“users:list”,function(){console.log(“触发用户列表”) ); App.navigate(“users”); MyRouteCtlr.listUsers();});控制台输出是:重定向...重定向我在这里缺少什么?如何将用户重定向到页面刷新以外的其他页面在检查登录cookie之后?顺便说一句,我使用Require.js作为依赖项。
更新:我已经解决了第一点,这是由于在require函数中加载了顺序。
2) 另一件事我尝试制作基础模型,而不是让所有其他人扩展该模型。因此,我在文件中创建了基本模型,如下所示:
define([
'backbone'
],
function( Backbone ) {
'use strict';
return Backbone.Model.extend({
initialize: function() {
console.log("BaseModel");
},
defaults: {}
});
});
然后我尝试将其扩展到另一个文件中:
define([
'backbone',
'localstorage',
'base-model'
],
function( Backbone, BaseModel ) {
'use strict';
return BaseModel.extend({
initialize: function() {
console.log("sub model");
},
});
});
但是当我运行它时会在return BaseModel.extend(...
行undefined is not a function
处提出错误。如果我在同一个文件中编写基本模式,那么运行完全正常,但不能使用不同的文件。我希望将它放在不同的文件中,以便所有其他模型也可以扩展它。同样适用于视图而没有任何错误。这里出了什么问题,如何解决?
扩展类中的BaseModel打印Backbone.LocalStorage.window.Store {name: undefined, serializer: Object, records: Array[0], save: function, create: function…}
,而在包含应用程序对象的主js中打印child {cid: "c2", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…}
。
答案 0 :(得分:1)
extend未在BaseModel中定义。我总是使用Jquery扩展方法来实现这些目的。您可以这样定义:
define([
'backbone',
'jquery'
],
function( Backbone, $) {
'use strict';
return Backbone.Model.extend({
initialize: function() {
console.log("BaseModel");
},
extend : function(obj){
return $.extend(true, obj, this);
},
defaults: {}
});
});
但实际上你可以自己实现扩展(如果你不想使用jquery扩展方法),这很容易。您只需将所有字段和功能从一个对象传输到另一个对象。
现在您可以使用这样的基本模型:
BaseModel.extend({//...});