我試圖實現的內容: 帶有一個文本輸入字段(名稱)的窗體,帶有一些選項的兩個選擇字段(類型爲&列),並帶有一個提交按鈕,用於創建一個Widget它的標題設置爲名稱,數據類型設置爲類型和列 - 它是頁面中的位置。將observableArray作爲函數參數傳遞
在這種情況下,類型在視圖中定義了幾個不同的選項,它的工作原理是花哨的,所以我現在不會進入我的工作方式。
截至目前我有三列,每它自己的observableArray頁面 - 像這樣:
self.col0 = ko.observableArray([]);
self.col0.id = 'col0'
這同樣適用於col1和COL2。我的目標是讓選擇字段指向這些數組。至少這是我認爲我需要做的。
我有一個createWidget函數,它查看DOM中的Name和Type值(如果我在這裏錯了,那麼這是我用KnockOut創建的第一件事),並創建一個新的Widget這些數據 - 像這樣:在DOM
input.widget-name type="text" placeholder="wName" data-bind="value: newWidgetName"
select data-bind="value: newType"
option value="calendar" Calendar
option value="article" Article
option value="document" Document
select.colPick data-bind="value: colPick"
option value="col0" Column 1
option value="col1" Column 2
option value="col2" Column 3
而且我的點擊處理程序createWidget功能
var Widget = function(name, type) {
var self = this;
self.name = name;
self.type = type;
};
var ViewModel = function() {
var self = this;
self.newWidgetName = ko.observable();
self.newType = ko.observable();
// Unrelated code in between
self.createWidget = function(target) {
newName = self.newWidgetName();
newType = self.newType();
widget = new Widget(newName, newType);
target.unshift(widget)
self.newWidgetName("");
};
輸入/選擇元素 - 像這樣:
Shazam,它的工作原理!
但是,這隻會將新Widget輸出到第一列(col0),它不會將列選擇字段的值考慮在內,並且不會將新Widget移入正確的列。多試錯後,我得到相當多的錯誤歸結爲:
1)「無法調用不印字的未定義」
2)「遺漏的類型錯誤:對象功能可觀察到的()....有沒有方法'不換'
因此,現在的代碼看起來像上面的例子,它不是理想的任何手段,但不同的列與knockout-sortable連接,這不是一個巨大的交易,如果這個功能必須用戶仍然可以將小工具從col0移到col2,反之亦然。
如果有人有這些資源可以指引我朝着正確的方向發展,還是回答他們的問題 - 隨時分享!
一切順利,卡斯。
編輯:後續問題的Tyrsius
您所提供我現在有三列選擇框使用的代碼,但是我掙扎了一下,當涉及到輸出窗口小部件進入視野。
與我以前的代碼,這是何等的觀點看起來像:
<div class="cols">
<div class="col col-25">
<ul data-bind="sortable: { template: 'widgetTmpl', data: col0, afterMove: $root.widgetData }">
</ul>
</div>
<div class="col col-50">
<ul data-bind="sortable: { template: 'widgetTmpl', data: col1, afterMove: $root.widgetData }">
</ul>
</div>
<div class="col col-25">
<ul data-bind="sortable: { template: 'widgetTmpl', data: col2, afterMove: $root.widgetData }">
</ul>
</div>
</div>
什麼,我有工作,現在是這樣的:
<div data-bind="foreach: columns">
<div data-bind="foreach: items" class="col">
<ul data-bind="sortable: { template: 'widgetTmpl', data: columns, afterMove: $root.widgetData }"></ul>
</div>
</div>
我的第一個問題,我意識到我沒當時沒有想過,所以跳過那一個。
問題2:我現在怎樣才能將這些小工具綁定到我在表單中選擇的列? 我會這樣做嗎?
<ul data-bind="sortable: { template: 'widgetTmpl', data: entryColumn, afterMove: $root.widgetData }"></ul>
還是我的方式? :)
非常感謝你,Tyrsius,這樣做!然而,我有一些關於foreach循環和一般視圖的後續問題,現在編輯主要帖子和後續問題。 然而,這回答了手頭的問題,所以我將其標記爲接受的答案。再次感謝! – 2013-03-14 18:35:08
@KasperLewau看我的更新 – Tyrsius 2013-03-14 18:54:08
我們走了!非常感謝您的幫助,我的代碼中清潔的房子。希望我能再見到你,一旦KnockoutJS變得艱難!乾杯! – 2013-03-14 19:02:30