Backbone.js backbone-extend.js不';我似乎无法加载我的方法
我将其添加到我的backbone-extend.js文件中,该文件与backbone-min.js位于同一文件夹中Backbone.js backbone-extend.js不';我似乎无法加载我的方法,backbone.js,backbone-views,extending,Backbone.js,Backbone Views,Extending,我将其添加到我的backbone-extend.js文件中,该文件与backbone-min.js位于同一文件夹中 _.extend(Backbone.View.prototype, { getFormData: function(form) { var unindexed_array = form.serializeArray(); var indexed_array = {}; $.map(unindexed_array, func
_.extend(Backbone.View.prototype, {
getFormData: function(form) {
var unindexed_array = form.serializeArray();
var indexed_array = {};
$.map(unindexed_array, function(n, i){
indexed_array[n['name']] = n['value'];
});
return indexed_array;
}
});
然而,当我在视图代码中调用this.getFormData时,我得到一个未定义的方法错误。我错过了什么?谢谢你的帮助
编辑:这是我的观点。我必须取消对getFormData方法的注释才能使其工作。否则它无法查看getFormData
define([
'jquery',
'underscore',
'backbone',
'models/Member',
'text!templates/memberEditTemplate.html'
], function($, _, Backbone, Member, memberEditTemplate) {
var MemberEditView = Backbone.View.extend({
el: $("#page"),
model: 'member',
initialize: function(args) {
this.member = new Member({ id: args.id });
this.member.on('error', this.eventSyncError, this);
this.member.on('sync', this.eventSyncModelLoaded, this);
this.member.fetch();
},
events: {
"click #bttnMemberSave": "bttnClickMemberSave"
},
eventSyncError: function(model,response,options) {
console.log('Sync error='+response.statusText);
$('#server-message').css({'color':'red', 'font-weight':'bold'}).text(response.statusText);
//$('#server-message').text(response.statusText);
},
eventSyncModelLoaded: function(model,response,options) {
this.render();
},
eventSyncModelSaved: function(model,response,options) {
console.log("Member saved!");
$('#server-message').css({'color':'green', 'font-weight':'bold'}).text("Member saved!");
//$('#server-message').text('Member saved!');
var to = setTimeout(function() { Backbone.history.navigate('members', true); }, 2000);
},
bttnClickMemberSave: function() {
var data = this.getFormData($('#member-form').find('form'));
this.member.save(data, { success: this.eventSyncModelSaved });
},
// getFormData: function(form) {
// var unindexed_array = form.serializeArray();
// var indexed_array = {};
// $.map(unindexed_array, function(n, i){
// indexed_array[n['name']] = n['value'];
// });
// return indexed_array;
// },
render: function() {
this.member.toJSON();
var compiledTemplate = _.template( memberEditTemplate, { member: this.member } );
this.$el.html( compiledTemplate );
return this;
}
});
return MemberEditView;
});
好的,我将backbone-extend.js添加到我的app.js中的RequireJS required files数组中,现在它开始工作了。您能提供实例化视图和调用方法的代码吗?这对我们会有帮助。@Lukas:刚刚发布了视图。视图功能齐全。代码没有问题。我只是无法让它看到getFormData扩展方法。仅适用于该本地方法。您是否曾经通过调用
new MemberEditView()
或new Backbone.view()
?@Lukas:Yes in router.js来实例化视图。这里还有一个问题:如果我要将上面的u.extend代码移出backbone-extend.js文件(出于某种原因没有加载),我会将代码放在哪里?在main.js中?还是在app.js中?我想我在app.js中尝试过初始化方法,但它也不起作用。@Lukas:是的,我不知道为什么我会这样想。我猜在我的脑海里,我想这就是这个词的含义。但现在看来这是个错误的猜测:-/