我正在试图弄清楚从parentView向其子视图之一发送操作有什么问题: 我做了一个PhotoUploadView用于调整大小然后上传图像;它添加了画布,在其模板中的div中绘制已调整大小的图像:
<div class="img-list">
//here the canvas will be added
</div>
此视图中的“saveImages”操作的行为如下:
var list = this.$('.img-list');
$.each(list.children(), function(index, value) {
//here the code to save
}
但是这个动作不是直接调用的;因为我不仅需要保存图像,还需要保存一些记录(报价记录和许多产品记录,报价的子项;图像与产品记录相关联); 所以我在parentView上有“保存”动作,如下所示:
//save records
offer.save().then(function(savedOffer) {
newProducts.forEach(function(product, indexP) {
product.set('offer', savedOffer);
product.save().then(function(savedProduct) {
}
}
}
//save photos by cycling the PhotoUploadViews that are inside ProductViews that are inside the mainView
this.get('childViews').forEach(function(view, index) {
if (index >= 4) { //the childView from the 4th are the ProductViews
var productId = view.get('product').get('id');
var folder = 'offer-' + controller.get('model').get('id') + '/product-' + productId + '/';
view.get('childViews')[0].send('saveImages', folder, productId); //the first childView of a ProductView is the UploadView
}
});
嗯,当您使用现有产品向现有商品添加图片时,这可以正常保存图片;但是当你创建一个新的优惠时,它会失败,因为该文件夹将是“offer-undefined / product-undefined”,因为当然你必须等待记录保存才能获得他们的ID;
所以我现在正尝试将send动作移动到产品保存的.then回调中:
var childViews = this.get('childViews'); //the childView starting from the 4th are the productsViews
offer.save().then(function(savedOffer) {
newProducts.forEach(function(product, indexP) {
product.set('offer', savedOffer);
product.save().then(function(savedProduct) {
var currentPview = (childViews[4 + indexP]); //get the productView associated with the current product
var productId = savedProduct.get('id');
var folder = 'offer-' + savedOffer.get('id') + '/product-' + productId + '/';
currentPview.get('_childViews')[2].send('saveImages', folder, productId); //the object at index 2 of _childViews array is the photoUploadView
此处,文件夹已正确构建,但在发送操作后,saveImages操作崩溃,表明列表未定义;试图在“saveImages”中记录“this”的值我可以看到它的值也是未定义的;有人可以解释为什么从一个点调用动作,它有效,并在产品的.then回调中调用它保存它不是吗?
我也想了解为什么在第一种情况下我可以做到
.get('childViews')[0]
获取PhotoUploadView,但在第二步我必须做
.get('_childViews')[2]
因为使用get('childViews)它不再起作用了; childViews和_childViews有什么区别?为什么_childViews有比childView更多的元素?