我是 Javascript 新手,正在尝试将 Gridster 与 Knockout 一起使用。我有一个包含项目的数据库,我使用淘汰赛 foreach 将它们绑定到 UL。UL 使用 Gridster 库进行样式设置。除非我尝试通过视图模型中的 ObservableArray 向 UL 添加其他元素,否则一切都很好。
谁能帮我理解这里的操作范围和顺序?感觉 Gridster 库并没有对新的小部件进行样式设置。
此jsfiddle 显示了该问题的工作演示。请注意,当您双击一个小部件时,它会创建一个新小部件,但不会将其放置在网格中。相反,它只是挂在后面。
这是HTML
<div class="gridster">
<ul data-bind="foreach: myData">
<li data-bind="attr:{
'data-row':datarow,
'data-col':datacol,
'data-sizex':datasizex,
'data-sizey':datasizey
},text:text, doubleClick: $parent.AddOne"></li>
</ul>
</div>
这是Javascript
//This is some widget data to start the process
var gridData = [ {text:'Widget #1', datarow:1, datacol:1, datasizex:1, datasizey:1},
{text:'Widget #2', datarow:2, datacol:1, datasizex:1, datasizey:1},
{text:'Widget #3', datarow:1, datacol:2, datasizex:1, datasizey:1},
{text:'Widget #4', datarow:2, datacol:2, datasizex:1, datasizey:1}];
// The viewmodel contains an observable array of widget data to be
// displayed on the gridster
var viewmodel = function () {
var self = this;
self.myData = ko.observableArray(gridData);
//AddOne adds an element to the observable array
// (called at runtime from doubleClick events)
self.AddOne = function () {
var self = this;
myViewModel.myData.push({
text: 'Widget Added After!',
datarow: 1,
datacol: 1,
datasizex: 1,
datasizey: 1
});
};
};
var myViewModel = new viewmodel();
ko.applyBindings(myViewModel);
$(".gridster ul").gridster({
widget_margins: [5, 5],
widget_base_dimensions: [140, 140]
});