私は単純な修正でなければなりません。ネストしたビューモデルでknockout.jsを使用していますが、削除機能が正しく動作していないことを除いて、すべてがうまく見えます。これは正しくバインドされているようですが、削除をクリックすると起動しません。ノックアウトネストされたビューモデル
なぜネストされたビューモデルですか?長い話ですが、本質的には1ページになるために多くのものが必要です!だからここ
はコードです:
HTML
<section class="mini-form-container">
<form data-bind="submit: repeatGuest.addDate">
<input type="date" data-bind="value: repeatGuest.previousStay"/>
<button type="submit" class="button-secondary ">Add date</button>
</form>
<div data-bind="foreach: repeatGuest.dates, visible: repeatGuest.dates().length > 0">
<div>
<input data-bind="value: date" disabled="disabled" />
<a data-bind="click: $parent.removeDate">Remove</a>
</div>
</div>
</section>
<section>
<div data-bind="text: ko.toJSON($data)"></div>
</section>
Javascriptを
function RepeatGuest() {
/// <summary>Child View Model</summary>
this.dates = ko.observableArray();
this.previousStay = ko.observable();
}
RepeatGuest.prototype.addDate = function() {
var self = this.repeatGuest;
if (self.previousStay()) {
self.dates.push({
date: self.previousStay()
});
}
};
RepeatGuest.prototype.removeDate = function (date) {
this.dates.remove(date);
}
function ViewModel() {
var self = this;
self.repeatGuest = new RepeatGuest();
}
ko.applyBindings(new ViewModel());
そして、ここでは私のバイオリンです:http://jsfiddle.net/6Px4M/2/
では、なぜ私の削除関数が起動しないのですか?
可能性のある側の質問:ノックアウトで取るために間違ったパスは、ネストされたビューモデルにあり、これに関する多くの情報に存在していないようですか?
私は 'var self = this'パターンが好きです。関数をバインドするのを覚えるよりも、 'self'だけを使うほうが簡単です。それはまた、よりきれいに見えます。 – Tyrsius
この良いもの、私から+1、しかし、彼はプロトタイプに貼り付けて以来、機能が実行されていなかったより根本的な問題があった。彼があなたのすべての措置をたどっていれば解決されるだろうが。 –
@Tyrsius - 私はあなたがまだプロトタイプに関数の実装を置く方法を示すことを試みていました。 'self'は良いパターンです。 –