- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使 collectionView 工作,但我不太确定 CollectionView 是否自动启动 fetch 方法,然后使用获取的数据填充 ChildViews。或者这是我需要手动做的事情?我已经检查了 Marionette 文档页面,但找不到任何可以回答我的问题的正确示例。
下面的示例是我到目前为止所得到的,集合填充了所有必需的数据,但由于某种原因数据没有传递到 subview 。
每当我调用“http://localhost/GetCategories”时,都会返回以下 JSON ':
JSON 数据:
[{"category_id":"Category1","category_name":"Category One"},
{"category_id":"Category2","category_name":"Category Two"}]
集合:
define([ 'underscore', 'backbone', 'models/MainMenu/MM.model.category'], function(_, Backbone, m_Category){
var CategoriesCollection = Backbone.Collection.extend({
model: m_Category,
url : 'GetCategories';
initialize: function() {
console.log('CategoriesCollection initialized...');
this.fetch()
}
});
return CategoriesCollection;
});
Collection View :
define([ 'backbone', 'underscore', 'marionette',
'collections/MainMenu/collection.categories' ,
'layouts/MainMenu/itemview.category'],
function (Backbone, _, Marionette, c_Categories, iv_Category) {
"use strict";
var CategoriesCollectionView = Marionette.CollectionView.extend({
tagName: 'div',
template: null,
id: 'categories',
childView: iv_Category,
collection : new c_Categories(),
initialize: function(){
console.log('Categories Collection: initialized');
/// or should I call fetch() from within the CV?
/// but how do I then pass all the data to ChildView?
this.collection.fetch().done(function(){
})
},
onRender: function(){
console.log(this.collection) ///<-- shows all the JSON data properly
},
onShow: function(){
}
});
return CategoriesCollectionView;
});
项目 View :
define([ 'backbone', 'underscore', 'marionette', 'templates/template.mainmenu'], function (Backbone, _, Marionette, template) {
"use strict";
var CategoryView = Marionette.ItemView.extend({
tagName: 'div',
template: template['category.layout'],
id: 'category-layout',
initialize: function(){
console.log('Category Layout: initialized');
},
onRender: function(){
console.log(this.model) /// < --- doesn't return anything
},
onShow: function(){
console.log(this.model) ///< --- doesn't return anything
}
});
return CategoryView;
});
它仅在我在 CollectionView 之上创建 LayoutView 并处理从那里获取和分配集合时才有效。
define([ 'backbone', 'underscore', 'marionette',
'templates/template.mainmenu',
'collections/MainMenu/MM.collection.categories',
'layouts/MainMenu/collectionview.categories' ],
function (Backbone, _, Marionette, template, c_Categories, cv_Categories) {
"use strict";
var CategoryLayoutView = Marionette.LayoutView.extend({
template: template['categories.layout'],
regions: {
categories : '#categories'
},
id: 'categories-layout',
initialize: function(options){
this.collection = new c_Categories();
console.log('Category Layout: initialized');
},
onRender: function(){
var categories = this.categories
var collection = this.collection;
collection.fetch().done(function(cData){
categories.show(new cv_Categories({collection : collection}))
})
},
onShow: function(){
}
});
return CategoryLayoutView;
});
任何帮助将不胜感激。
谢谢
最佳答案
预备知识:Collection/CompositeView 的主要目的是正确渲染 Backbone.Collection,即将集合模型传递给 CollectionView 子级,并渲染这些子级。除了提供一个 Collection/CompositeView 以及一个预填充的集合(这是关键)之外,您无需参与。
现在,您遇到的问题是您正在 CategoriesCollection.initialize()
上执行异步提取(默认情况下所有 AJAX 调用都是异步的)。由于在定义 CategoriesCollectionView
(请参阅其 collection
属性)时会调用该初始化,因此在渲染它时,提取可能不会及时返回。因此,CollectionView 会进行渲染,但找不到模型,并且仅渲染一个 emptyView
(如果已提供)。
你有两个选择:在 LayoutView 中执行你正在做的事情(这不仅是我在我的观点中总是做的事情,而且我已经与一些顶级 Marionette 贡献者交谈过并且它们执行相同的操作),或者同步获取(出于性能原因,我不建议这样做)。
一些提示
从 CategoriesCollection.initialize()
中删除提取(如果您想将其保留在那里,则必须传递选项 { async: false }
在获取中,以保证数据会在您渲染 View 时返回。但是,我不建议这样做,因为您在等待获取时会阻塞 CPU)。
从 CategoriesCollectionView
定义中删除 CategoriesCollectionView.collection
属性。相反,我们将从父 LayoutView 中传递集合
我建议您在 Promise 处理程序中使用 .then()
而不是 .done()
。两个原因:
a. .then()
更好地处理错误:如果错误不受管理,它将显示堆栈跟踪,并且第二个参数始终可用于实际处理 Promise 导致的错误。b. .then()
允许您继续链接。也许不是在这个调用中,但在其他一些 Promise 中,您可能希望在调用进入后调用一系列回调。顾名思义,.done()
是回调链的末尾
除此之外,您的解决方案是最佳实践。
关于javascript - CollectionView - 集合数据未传递给 childView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30909784/
我在 Storyboard 中有一个 collectionView,如下所示: 注意约束:Collection View.top = Search Bar.bottom 我不想要该行上方的 Colle
我有一个包含两个部分的 Collection View ,每个部分都有一个项目。部分中的单元格包含 Collection View ,我需要使高度单元格适合内容 Collection View 。 我
我见过将 Collection View 嵌套在 TableView 中的解决方案,但对于我的应用程序,我需要有 2 个 Collection View ,因为这样可以更轻松地执行其他操作。 因此,让
感谢帮助。 如上所示,CollectionView ItemSize.height 比 CollectionView.height 大。我只是在 viewDidLayoutSubviews() 中设置
我有一个collectionview(A),它可以作为“卡片 View ”来滑动。在最后一个卡/单元格中,我有另一个 Collection View (B)来显示更多单元格。到目前为止,一切都很好!一
我正在寻找一种方法,当您滚动到 collectionView 中的另一个单元格时,可以更改 imageView 中的图像。 因此,当滚动单元格的 (1) 时,我想更改图像 (2)。 创建此内容的最佳方
我的 NSCollectionView 项目集成了另一个 NSCollectionView。一切都很好,但在第一个 View 中选择项目时就不行了。 当我设置collectionView1.isSel
我是一名 Android 开发者,正在尝试学习 iO 开发。 我正在尝试在水平分页滚动器内实现垂直滚动 UI(就像 ViewPager 内的 RecyclerView)。 我知道我应该使用嵌套的 UI
我在collectionView中有一个collectionView,我希望能够选择第二个collectionView中的一个单元格来执行到另一个ViewController的segue。 目前,当我
我有这两个代表: #pragma mark = UICollectionViewDataSource - (NSInteger)collectionView:(UICollectionView*)co
嘿,我正在尝试在我的动态 Collection View 单元格之后添加一个静态 Collection View 单元格。例如在我的屏幕截图中,在“Study Grind Edition” Colle
是否可以通过在 Collection View Cell .swift 文件中编写代码来阻止我的 Collection View 滚动。我希望能够在用户点击单元格中的按钮时停止滚动,然后在再次按下按钮
我有一个用例,我想要呈现一组collectionViews(或复合 View )。使用 marionette.js 执行此操作的最佳方法是什么? 我的模型结构如下- A | |-- Collectio
我有一个 View Controller ,其中有 tableView 和 Collection View 。我为 collectionView 和 tableView 设置了相同的高度。 前半部分是
在 Visual Studio 2017 中,尝试存档 Xamarin Android 项目时,成功构建后出现以下错误: 无法创建应用程序存档“MyArchive”。这种类型的 CollectionV
我对 Collection View 完全陌生,请帮助我在 Collection View 中垂直和水平滚动单元格: viewcontroller.h #import @interface View
我在一个表格 View 单元格中有两个不同的 collectionView。原因是因为我试图找到实现一个水平 collectionView 和一个显示不同数据的垂直 collecitonView 的最
我想在另一个 collectionview 标题中实现一个 Collection View 幻灯片,但是当我尝试连接 uicollectionview 的导出时,我收到一条错误消息,指出导出无法连接到
您好,我已经为这个问题苦苦挣扎了一段时间,一直想不出来。 我想做的是,在 collectionview 单元格内按下一个按钮,然后执行到下一个单元格的转换。 这是我想在 collectionview
在 collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayo
我是一名优秀的程序员,十分优秀!