gpt4 book ai didi

javascript - Collection.get 在 backbone.js 中返回未定义

转载 作者:行者123 更新时间:2023-11-30 18:25:31 25 4
gpt4 key购买 nike

我对 collection.get 和 model.get 返回未定义有疑问。

这是我的初始化代码

initialize: function () {
this.collection = new productsCollection();
this.model = new productModel();
}

这是我的渲染代码

this.collection.fetch({
success: function (product) {
console.log(product);
$(that.el).html(_.template(productListTemplate, { products: product.models, _: _ }));
}
});

我的产品列表显示正常。当我点击每个产品时,我会看到一个可以更改名称的弹出窗口

我想在模型中获取设置的新名称并触发保存

但是我无法得到产品的型号这里是代码

$("#productName").val($(e.currentTarget).html());

var ID = $(e.currentTarget).data("id");
var item = this.collection.get(ID);

console.log("start..........");
console.log(item);
console.log(ID)
// console.log(this.collection);
console.log(this.model.get(item));
console.log("end..........");

$('.modal').modal('toggle');

我能够在控制台中获得正确的 id,但不能获得集合和模型

谁能帮忙提前谢谢

更新这是完整的 View 代码

function ($, _, Backbone, popupModal, productTab, productsCollection, productListTemplate, productModel) {
var productListView = Backbone.View.extend({
el: $("#page"),
initialize: function () {
this.collection = new productsCollection();
this.model = new productModel();
this.model.bind('change', this.loadResults, this);
},
render: function () {
this.loadResults();
},
loadResults: function () {
var that = this;
this.collection.fetch({
success: function (product) {
console.log(product);
$(that.el).html(_.template(productListTemplate, { products: product.models, _: _ }));
}
});
var modalWindow = $(".modal").modal({
show: false,
backdrop: true,
closeOnEscape: true
});
$('#createProduct').click(function (e) {
this.modalWindow.modal('show');
});
},
// This will simply listen for scroll events on the current el
events: {
"click #saveProduct": "saveProduct",
"click .productTabs": "productTabs",
"click .productDetails": "productDetails"
},
saveProduct: function () {
this.model.set({
Name: $('#productName').val()
});
this.model.save({ id: this.model.get('id') },
{
success: function (model, response) {
// console.log("success");
},
error: function (model, response) {
// console.log(response);
var errorMsg = JSON.parse(response.responseText);
$(".errorMessage").html('<div class="alert alert-error">' + errorMsg.Error + '</div>');
}
});
},
productTabs: function (e) {
e.preventDefault();
$(this).tab('show');
},
productDetails: function (e) {
e.preventDefault();
$("#productName").val($(e.currentTarget).html());
var ID = $(e.currentTarget).data("id");
var item = this.collection.get(ID);
console.log("start..........");
console.log(item);
console.log(ID)
// console.log(this.collection);
console.log(this.collection.models.get(item));
console.log("end..........");
$('.modal').modal('toggle');
}
});
return new productListView;
});

更新回复

this.collection

b.hasOwnProperty.e
_byCid: Object
_byId: Object
_onModelEvent: function () { [native code] }
_removeReference: function () { [native code] }
length: 2
models: Array[2]
0: b.hasOwnProperty.e
1: b.hasOwnProperty.e
length: 2
__proto__: Array[0]
__proto__: s​

它有 2 个型号,我的列表也有 2 个产品

this.model

_callbacks: Object
_changed: false
_changing: false
_escapedAttributes: Object
_previousAttributes: Object
attributes: Object
ID: ""
Name: ""
hRef: ""
__proto__: Object
cid: "c2"
__proto__: s

属性为空

让我关注

cid: "view1"
collection: b.hasOwnProperty.e
_byCid: Object
_byId: Object
_onModelEvent: function () { [native code] }
_removeReference: function () { [native code] }
length: 2
models: Array[2]
__proto__: s
model: b.hasOwnProperty.e
_callbacks: Object
_changed: false
_changing: false
_escapedAttributes: Object
_previousAttributes: Object
attributes: Object
cid: "c2"
__proto__: s
options: Object
__proto__: s

更新 这是我扩展收藏时看到的内容

b.hasOwnProperty.e
_byCid: Object
_byId: Object
_onModelEvent: function () { [native code] }
_removeReference: function () { [native code] }
length: 2
models: Array[2]
0: b.hasOwnProperty.e
_callbacks: Object
_changed: false
_changing: false
_escapedAttributes: Object
_previousAttributes: Object
attributes: Object
ID: "7e0c94fc-7c16-45c9-84a9-a0690103b946"
Name: "dsa"
hRef: "Product/dsa"
__proto__: Object
cid: "c3"
collection: b.hasOwnProperty.e
__proto__: s
1: b.hasOwnProperty.e
length: 2
__proto__: Array[0]
__proto__: s

最佳答案

问题是您必须将所有将由 DOM 事件调用的函数绑定(bind)到您的 View 实例:

因此将这一行添加到您的initialize 方法中:

_.bindAll(this, "saveProduct", "productTabs", "productDetails")

否则函数中的 this 将是全局 window 对象,而不是 View 的实例。

关于javascript - Collection.get 在 backbone.js 中返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10937031/

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