私はJavascriptが初めてで、KnockoutでGridsterを使用しようとしています。アイテムのデータベースがあり、ノックアウト 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>
ジャバスクリプトはこちら
//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]
});