gpt4 book ai didi

backbone.js - Backbone 导航没有被路由器监听,但是加载它可以工作

转载 作者:行者123 更新时间:2023-12-01 19:14:29 28 4
gpt4 key购买 nike

我正在使用 requirejs 和 backbone 开发一个应用程序,在索引 View (索引页面)中我遇到了 2 个困难...

  1. 当我像这样使用导航功能时:

    this.navigate("dashBoard/");

这是行不通的,以防我使用:

Backbone.history.navigate("dashBoard/");

它工作正常。即使在我的“路线”中,我也没有触发该功能。这是我的索引 View ..

define(["singleton","backbone"],function (obj,Backbone) {

window.EDMS = obj || {};

EDMS.index = Backbone.View.extend({
el:$(".loginPage > section"),
events:{
"click #loginBtn" : "enter"
},
initialize:function(){
this.$el.html(this.template());
},
enter:function(e){
e.preventDefault();
var userName = $.trim(this.$el.find("#userName").val()),
password = $.trim(this.$el.find("#password").val());

if(userName && password){
Backbone.history.navigate("dashBoard/"); //only this is works
//this.navigate("dashBoard/") not working.
}else{
return false;
}
}
});

return EDMS.index;
})

但是如果是“EDMS.routers”的控制台 - 我正在获取方法......如何正确地将我的索引 View 同步到路由器......有什么帮助吗?

我的 routers.js

define(["singleton","backbone","utils"], function (EDMS,Backbone,utils) {

window.EDMS = window.EDMS || {};

EDMS.routers = Backbone.Router.extend({
routes:{
"":"caller",
"dashBoard/":"dashBoard"
},
initialize:function(){
utils(["index"]);

},
caller:function(){
console.log("i am called");
},
dashBoard:function(){
console.log("welcome to dashBoard");
}
});

return EDMS.routers;

})

我的应用在 require.js 上初始化

require(["jquery","underscore","backbone","singleton","routers"],function ($,_,Backbone,EDMS,routers) {
EDMS.router = new EDMS.routers();
Backbone.history.start();
});

最佳答案

使用 requirejs 使您能够分离模块(您可能已经知道)。正确的方法是通过 require 访问分离的模块。

当然你应该在你的应用程序中有这样的东西:

require.config({
paths: {
jquery: 'libs/jquery/jquery',
underscore: 'libs/underscore/underscore',
backbone: 'libs/backbone/backbone'
}
});

你的路由器在最终的应用程序初始化中被初始化,基本上代码应该是这样的:

define('routers', ["backbone","utils"], function (Backbone,utils) {

var routers = Backbone.Router.extend({
routes:{
"":"caller",
"dashBoard/":"dashBoard"
},
initialize:function(){
utils(["index"]);

},
caller:function(){
console.log("i am called");
},
dashBoard:function(){
console.log("welcome to dashBoard");
}
});

return new routers();

});

在你看来:

define('indexView', ["routers","backbone"],function (router,Backbone) {

var index = Backbone.View.extend({
el:$(".loginPage > section"),
events:{
"click #loginBtn" : "enter"
},
initialize:function(){
this.$el.html(this.template());
},
enter:function(e){
e.preventDefault();
var userName = $.trim(this.$el.find("#userName").val()),
password = $.trim(this.$el.find("#password").val());

if(userName && password){
router.navigate("dashBoard/");
}else{
return false;
}
}
});

return index;
});

在你的初始化中

require(["jquery","underscore","backbone","indexView","routers"],function ($,_,Backbone,indexView,routers) {
window.App = { indexView: new indexView() };
});

通过这样做,您将在路由器中弹出一个事件,您可以像这样从您的任何集合/ View /模型中收听该事件:

    router.on('route', function() { console.log('we have routed'); });

关于backbone.js - Backbone 导航没有被路由器监听,但是加载它可以工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16494797/

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