Javascript 在AMD/Require.js模块中定义自定义属性,必要时从AMD/Require.js模块加载其他模块?
我正在尝试为中央控制器(实际上是主干视图)定义新属性,以使其更加分区和结构化。我试图通过if语句将我希望在不同情况下实现的渲染分离开来,并在这些新属性中实现每个情况的渲染。但在插入替换代码以实现这一点之后,以及在代码插入之前对代码进行注释,使我的应用程序无法工作 我做错了什么 我可以想象的另一种方式是,再次有条件地将我编写的不同AMD/Require.js modeule加载到一个单独的文件中,然后加载它们。但是怎么做呢?通过render:中的require()或通过传递给下面define()的第二个参数的新moduleNameJavascript 在AMD/Require.js模块中定义自定义属性,必要时从AMD/Require.js模块加载其他模块?,javascript,backbone.js,requirejs,amd,Javascript,Backbone.js,Requirejs,Amd,我正在尝试为中央控制器(实际上是主干视图)定义新属性,以使其更加分区和结构化。我试图通过if语句将我希望在不同情况下实现的渲染分离开来,并在这些新属性中实现每个情况的渲染。但在插入替换代码以实现这一点之后,以及在代码插入之前对代码进行注释,使我的应用程序无法工作 我做错了什么 我可以想象的另一种方式是,再次有条件地将我编写的不同AMD/Require.js modeule加载到一个单独的文件中,然后加载它们。但是怎么做呢?通过render:中的require()或通过传递给下面define()的
在
render
方法中,调用render\u app
和render\u login
的替换代码实际上没有执行它们。您忘记了()
综上所述,被遗忘的括号 1-render_应用程序和render_登录到render_应用程序()和render_登录() 2-纠正语法错误:render_login函数定义中的第二个括号
3-交换render_应用程序和render_登录属性名称或其匿名功能中使用的模板。它们互相使用。但是我发送的代码有语法错误。关闭render login attributes Anonyman函数应该只有一个
}
有两个。与您的答案和另外一件事一起,render_应用程序和render_登录名应该互换。他们的实现加载了彼此的模板。在问题的开头,您提到此脚本在更改之前工作。所以我没有寻找像}
这样的语法错误。if语句和方法的实现是您的特殊问题,您应该决定选择哪一个,而不是答案编写器。所以记住这些,请纠正你的语法和逻辑问题,删除你的补充答案,因为事实上它重复了我的答案。我的答案解决了这个问题。谢谢你的回答,但这还不足以使它起作用。当然,在替换我提到的代码时,我意外地在该位置添加了一个额外的括号,这与您建议的解决方案在代码中不是一种不同的问题。两者都是句法问题和解决方案。逻辑问题是另一个问题,可以是另一个答案,但又不像你的答案和我的两个答案那么完整。更重要的是,我的答案中提到你的答案不属于我。如果我删除我的答案,你的答案并不能解决问题,而这个问题是故意不回答的。如果我纠正了问题文本中的错误,我就破坏了问题,那么问题就不再是问题了。我可以纠正你指出的缺少括号的部分,但这在这里是难以接受的。这里是要保存和解决的问题和要保存的解决方案,而不是要保存、解决和删除的问题和解决方案。您的回答很受欢迎,也很有帮助。第二种和第三种情况只是复制粘贴代码时出现的语法错误,原因是在代码生效之前。第一个是主要问题。谢谢你参考我的答案。
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;
});
if (this.model.get('loginp') == true) {
this.render_app();
} else {
this.render_login();
}