我正在尝试为中央控制器(实际上是骨干视图)定义新的属性,以使其更加划分和结构化。我尝试通过if语句在不同情况下实现我想要实现的渲染,并在这些新属性中实现每个案例的渲染。但插入替代代码后,它会使我的应用程序无法工作,从而实现该代码并评论代码。定义自定义属性并在需要时从AMD/Require.js模块加载其他模块?
我做了什么错事。
另一种我可以想象的模块化方式是再次有条件地加载不同的AMD/Require.js模型,我用单独的文件/ s加载并加载它们。但是如何?通过render()内部的require(),或者通过将新的moduleName传递给下面的define()的第二个参数。
调用render_app
和
render_login
define([
'jquery',
'ratchet',
'underscore',
'backbone',
'models/login',
'text!templates/login.html',
'text!templates/app.html'
], function($, Ratchet, _, Backbone, LoginModel, LoginTmpl, AppTmpl){
var LoginView = Backbone.View.extend({
el: $("body"),
template_login: _.template(LoginTmpl),
template_app: _.template(AppTmpl),
initialize: function(){
this.model = new LoginModel;
this.listenTo(this.model, 'change', this.render);
this.render();
},
//Replacement code: two attributes:
render_login: function(){
this.$el.html(this.template_app(this.model.toJSON()));
console.log(JSON.stringify(this.model));
return this;
}
},
render_app: function(){
this.$("#content").html(this.template_login(this.model.toJSON()));
console.log(JSON.stringify(this.model));
return this;
},
render: function() {
/*
if (this.model.get('loginp') == true) {
this.$el.html(this.template_app(this.model.toJSON()));
console.log(JSON.stringify(this.model));
return this;
}
*/
/*
else {
this.$("#content").html(this.template_login(this.model.toJSON()));
console.log(JSON.stringify(this.model));
return this;
}
*/
//Replacement code:
if (this.model.get('loginp') == true) {
this.render_app;
} else {
this.render_login;
}
},
events: {
'click #loginbtn' : 'login',
'click #registerbtn' : 'register'
},
login: function(e){
e.preventDefault();
var formData = {};
$('input').each(function(i, el) {
if($(el).val() != '') {
if(el.id === 'username') {
formData[ el.id ] = $(el).val();
} else if(el.id === 'password') {
formData[ el.id ] = $(el).val();
}
}
console.log(i + ": " + $(el).val());
console.log(JSON.stringify(formData));
// Clear input field values
$(el).val('');
});
this.model.save(formData);
}
});
return LoginView;
});
但我发送的代码有语法错误。关闭渲染登录属性匿名函数应该只有一个'}'那里有两个。 再加上你的回答,还有一件事情,render_app和render_login的名字应该互换。他们的实现有彼此的模板加载。 – 2014-09-30 20:46:40
在您提出问题的初始阶段,您已经提到此脚本在更改之前有效。所以我没有像'}'那样查找语法错误。你的if语句和方法的实现是你特别的问题,你应该决定选择哪一个,而不是答案编写者。因此,考虑到这一点,请纠正您的语法结尾逻辑问题,并删除您添加的答案,因为实际上它是重复我的。 – 2014-09-30 21:10:25
我的答案是解决问题的方法。谢谢你的回答,但是它不足以让它工作。当然,在替换我提到的代码时,我无意中在该位置添加了一个额外的括号,并且这不是代码中的另一种问题,而是您建议的解决方案。两者都是语法问题和解决方案。而合乎逻辑的问题是另一个可以作为另一个答案的问题,但又不如你的答案和我自己的两个答案一样完整。甚至更多,你的回答在我的回答中被提及,属于不属于我的。 – 2014-09-30 21:26:11