Javascript 未捕获类型错误:无法读取属性'_listenId';未定义的-(木偶,主干)
我一直在试验木偶的复合视图,但我的脚本不断地抛出一个错误“UncaughtTypeError:无法读取未定义的属性'\u listenId'。一次彻底的黑客攻击表明,compositeview从未触发“重置”事件:查看下面的我的代码: 我的模板Javascript 未捕获类型错误:无法读取属性'_listenId';未定义的-(木偶,主干),javascript,jquery,backbone.js,marionette,Javascript,Jquery,Backbone.js,Marionette,我一直在试验木偶的复合视图,但我的脚本不断地抛出一个错误“UncaughtTypeError:无法读取未定义的属性'\u listenId'。一次彻底的黑客攻击表明,compositeview从未触发“重置”事件:查看下面的我的代码: 我的模板 <script type="text/template" id="staff-list"> <thead> <tr> <th>First Name</th> <th&g
<script type="text/template" id="staff-list">
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>course</th>
</tr>
</thead>
<tbody>
</tbody>
</script>
<script type="text/template" id="staff-list-item">
<td><%= fname %></td>
<td><%= lname %></td>
<td><%= course %></td>
</script>
list_controller.js
entitystaff.js
我不知道我的代码出了什么问题。我不断地得到这个错误:
未捕获的TypeError:无法读取未定义的属性“\u listenId”
我做错什么了吗?或者版本中有不推荐的内容?在这里
$.when(fetchingStaffs).done(function(staffs){
var contactsListView = new View.Staffs({
collection: staffs
});
员工需要成为骨干。收集实例。然而,延迟查询的结果似乎只是一个简单的数组或对象。参见defer.resolve(数据、响应、选项)
,其中数据
是ajax请求的结果
要修复getStaffEntities
函数,我将使用如下链接:
getStaffEntities : function () {
var staffs = new Entities.StaffCollection();
return staffs.fetch().then(function () {
if (staffs.length === 0) {
console.log("no initialization");
var models = initializeStaffs();
staffs.reset(models);
}
return $.when(staffs);
});
}
这里的
staff
是什么var contactsListView=newview.staff({collection:staff})
fromvar fetchingStaffs=SchoolManager.request(“职员:实体”)代码>来自entitystaff.jsSchoolManager.requres.setHandler(“staff:entities”,function(){return API.getStaffEntities();})代码>您使用的是哪个版本的木偶网?我建议删除所有本地存储和API内容,并首先使用本地数据重新生成一个简单的木偶网视图,请参阅。也可以考虑用4。X,如果可能的话,更好的API.thanks为这个伟大的片段我很高兴。但是如果您从我上面的代码中注意到,问题在于list_view.jsinitialize:function(){this.listenTo(this.collection,'reset',function(){console.log(“reset is called”);//这似乎从未达到过this.appendHtml=function(collectionView,itemView){collectionView.$el.append(itemView.el);}}}}
从未调用console.log('reset is called')
意味着无法对集合进行重置,这是因为在this.listenTo(this.collection,'reset',function()中{
…此.collection
对象不是主干。collection.仍然不起作用..那么从我的源代码中知道我做错了什么吗?或者我如何使员工的收藏与我现在做的有所不同?请仍然期待任何帮助。
define(["app","../config/storage/localstorage"], function(SchoolManager){
SchoolManager.module("Entities", function(Entities, SchoolManager, Backbone, Marionette, $, _){
// Private
// -------------------------
Entities.Staff = Backbone.Model.extend({
urlRoot: "staff",
defaults: {
fname: "",
lname: "",
course: ""
},
});
// Public
// -------------------------
Entities.configureStorage(Entities.Staff);
Entities.StaffCollection = Backbone.Collection.extend({
url: "staff",
model: Entities.Staff,
});
Entities.configureStorage(Entities.StaffCollection);
var initializeStaffs = function(){
contacts = new Entities.StaffCollection([
{ id: 1, fname: "Alice", lname: "Arten", course: "555-0184" },
{ id: 2, fname: "Bob", lname: "Brigham", course: "555-0163" },
{ id: 3, fname: "Charlie", lname: "Campbell", course: "555-0129" }
]);
contacts.forEach(function(contact){
contact.save();
});
return contacts.models;
};
var API = {
getStaffEntities: function(){
var staffs = new Entities.StaffCollection();
var defer = $.Deferred();
staffs.fetch({
success: function(data,response, options){
//console.log("we are winners");
defer.resolve(data,response, options);
}
});
var promise = defer.promise();
$.when(promise).done(function(staffs){
if(staffs.length === 0){
// if we don't have any contacts yet, create some for convenience
// var models = initializeContacts();
console.log("no initialization");
var models = initializeStaffs();
staffs.reset(models);
// var models = initializeContacts();
// staffs.reset(models);
// contacts.reset(models);
}
});
return promise;
},
getStaffEntity: function(staffId){
var staff = new Entities.Staff({id: staffId});
var defer = $.Deferred();
setTimeout(function(){
staff.fetch({
success: function(data){
defer.resolve(data);
},
error: function(data){
defer.resolve(undefined);
}
});
}, 2000);
return defer.promise();
}
};
SchoolManager.reqres.setHandler("staff:entities", function(){
return API.getStaffEntities();
});
SchoolManager.reqres.setHandler("staff:entity", function(id){
return API.getStaffEntity(id);
});
});
return;
});
$.when(fetchingStaffs).done(function(staffs){
var contactsListView = new View.Staffs({
collection: staffs
});
getStaffEntities : function () {
var staffs = new Entities.StaffCollection();
return staffs.fetch().then(function () {
if (staffs.length === 0) {
console.log("no initialization");
var models = initializeStaffs();
staffs.reset(models);
}
return $.when(staffs);
});
}