これはちょっと簡単に分かりやすく、おそらく答えが私の鼻の下にあることは分かっていますが、次の表のHTML5でコンテンツを編集するカスタムバインディングを作成しようとしていますthis linkの例では、observableArray()で動作させることができません。配列の値でノックアウトcontentditableバインド
テーブルは、このようなforeachのデータbindigとビューに表示されている:
<tbody data-bind="foreach: customers">
<tr data-bind="attr: {id: $index}">
<td style="text-align: center;">
<span class="label label-primary" data-bind="html: Id"></span>
</td>
<td data-bind="html: Name, attr: {id: 'Nome'}, contentEditable: true"></td>
</tr>
</tbody>
ビューモデルがこれです:で
機能ビューモデル(){
var self = this;
self.data = '@jsonList';
self.customers = ko.observableArray(JSON.parse(self.data));
self.editable = ko.observable(false);
for (i = 0; i < self.customers().length; i++) {
self.customers()[i]['Details'] = '/Anagrafica/Details/' + self.customers()[i]['Id'];
self.customers()[i]['Delete'] = '/Anagrafica/Delete/' + self.customers()[i]['Id'];
};
ko.bindingHandlers.htmlEdit= {
update: function (element, valueAccessor) {
var value = ko.unwrap(valueAccessor());
}
};
ko.bindingHandlers.contentEditable = {
init: function (element, valueAccessor, allBindingsAccessor) {
var value = ko.unwrap(valueAccessor()),
htmlEdit= allBindingsAccessor().htmlEdit;
$(element).on("input", function() {
if (ko.isWriteableObservable(htmlEdit)) {
htmlEdit(this.innerHTML);
}
});
},
update: function (element, valueAccessor) {
var value = ko.unwrap(valueAccessor());
element.contentEditable = value;
$(element).trigger("input");
}
};
};
var viewModel = new ViewModel();
ko.applyBindings(viewModel);
私は配列上の要素を指すように設定する方法を理解していないので、コード自体についてちょっと混乱しています。
注:配列に値が設定されていますが、コンテンツの表示に問題はありません。
ありがとう、私は助けを前に進んでいます。
編集:あなたの代わりに名前のスペルの間違いの名前を持っていたように、ここで私は、コード
おかげで(私はそれが使用時にひどい午前)、ない:
はフィドルを更新していない、それはまだ修正を得ることはありません。最後の目的はAjaxコールで元のモデルを変更するためにそれを使用することです^^ "しかし、私は既にその呼び出しを行う方法を知っています – Blacky
私はコンテンツが" contentEditable:editable "で編集可能であり、観測可能な配列にあるパラメータ – Blacky
編集可能なものと編集不可能なものをトリガするものは?あなたが他のSO投稿に提供したリンクの受け入れられた回答の例は、チェックボックスを使って 'selfの値を変更しています。編集可能です。 – ASindleMouat