【发布时间】:2014-08-06 07:06:17
【问题描述】:
我正在尝试学习和制作backbone.marionette 应用程序,但有以下两个疑问/问题:
1) 如果用户已经登录,我正在尝试将用户重定向到主页,而不是默认登录页面。为了检查用户是否已经登录,我在模型中使用了 jquery.cookie 并在木偶应用程序启动时使用该模型类检查重定向的位置。 cookie 工作正常,我从 cookie 中获取值,但我的应用程序没有路由到主页。我在应用启动 event.App.on("start", function(options) {var session = new UserSession(); // UserSession 是包含 jquery.cookie 部分的模型 if (session.authenticated()) { console.log("redirecting..."); App.trigger("users:list"); console.log("redirected"); } } 在另一个文件中我有 App.addInitializer( function (options) { 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…}。
【问题讨论】:
-
1) backbonejs.org/#Router-navigate 2) 如果你这样做了
console.log(BaseModel)我想它是未定义的,你不需要正确的路径 -
@DominicTobias 2) 它打印
Backbone.LocalStorage.window.Store {name: undefined, serializer: Object, records: Array[0], save: function, create: function…} -
听起来不对,模型没有序列化(这通常是您在发送到模板时在视图中执行的操作)方法,并且其中还有其他内容,例如记录和 localStorage非默认,所以我认为上面的代码不完整?
-
@DominicTobias 第二点,这就是我在两个模型中所拥有的。我还没有做任何花哨的事情。
-
@DominicTobias 有趣的是,当我在
App.on('start', function(){...})上打印相同的内容时,它的打印结果类似于child {cid: "c2", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…},这实际上看起来是正确的。
标签: jquery backbone.js cookies routes marionette