「タスク」という名前のforeach-template
ループをロードしたソート可能なアコーディオンがあります。ko.observableArray()
TaskId
アコーディオンで、 、TaskName
、およびタスクDescription
- すべてをレンダリングしますko.observable()
。
TaskName
Description
input/textarea 要素でレンダリングされます。
TaskName
またはDescription
が変更されたり、アイテムが選択解除されたり、別のアイテムがクリックされたりするたびに、関数saveEdit(item)
を呼び出して、更新されたものを ajax リクエストを介してデータベースに送信しTaskName
たいとDescription
考えています。
TaskId
に送信する実際のキーと値のペアを取得するには、 を Tasks-array と一致させる必要がありsaveEdit()
ます。
これはHTMLです:
<div id="accordion" data-bind="jqAccordion:{},template: {name: 'task-template',foreach: Tasks,afteradd: function(elem){$(elem).trigger('valueChanged');}}"></div>
<script type="text/html" id="task-template">
<div data-bind="attr: {'id': 'Task' + TaskId}" class="group">
<h3><b><span data-bind="text: TaskId"></span>: <input name="TaskName" data-bind="value: TaskName /></b></h3>
<p>
<label for="Description" >Description:</label><textarea name="Description" data-bind="value: Description"></textarea>
</p>
</div>
</script>
これはバインディングです:
ko.bindingHandlers.jqAccordion = {
init: function(element, valueAccessor) {
var options = valueAccessor();
$(element).accordion(options);
$(element).bind("valueChanged",function(){
ko.bindingHandlers.jqAccordion.update(element,valueAccessor);
});
},
update: function(element,valueAccessor) {
var options = valueAccessor();
$(element).accordion('destroy').accordion(
{
// options put here....
header: "> div > h3"
, collapsible: true
, active: false
, heightStyle: "content"
})
.sortable({
axis: "y",
handle: "h3",
stop: function (event, ui) {
var items = [];
ui.item.siblings().andSelf().each(function () {
//compare data('index') and the real index
if ($(this).data('index') != $(this).index()) {
items.push(this.id);
}
});
// IE doesn't register the blur when sorting
// so trigger focusout handlers to remove .ui-state-focus
ui.item.children("h3").triggerHandler("focusout");
if (items.length) $("#sekvens3").text(items.join(','));
ui.item.parent().trigger('stop');
}
})
.on('stop', function () {
$(this).siblings().andSelf().each(function (i) {
$(this).data('index', i);
});
})
.trigger('stop');
};
};
私が最初に考えたのは、ラインを配置することでした
$root.SelectedTask( ui.options.active );
私のviewModelで定義されたko.observableである.on('click')
イベント関数で。SelectedTask
ただし、この.on('click')
イベントは多くの呼び出しが行われているようで、多くのトラフィックが生成されています。また、選択した「項目」をタスクから ajax 関数を介してデータベースに送信する save(item) 呼び出しをどこに配置するかがよくわかりません。
どんな助けでも大歓迎です。前もって感謝します!:)