2

MVC3 で knockout.js を使用しようとしていますが、エラーが発生し続けます。

Uncaught TypeError: undefined のメソッド 'remove' を呼び出せません

セットアップは、追加および削除する必要がある UL リストを持っていることです。

<ul data-bind="foreach: Interviewees">
   <li>
       <div>
           <a data-bind="click: $root.removeInterviewee" class="xOut"></a>
        </div>
       <div>
          <h2>
              <span data-bind="text: FirstName"></span>
               <span data-bind="text: LastName"></span>
          </h2>
      </div>
   </li>
</ul>

ノックアウトのものがあるJavaScriptセクションは次のとおりです。

function SomeThingee(Id, SomeThingeeId, firstName, lastName, title, email) {
        this.Id = Id;
        this.SomeThingeeId = SomeThingeeId;
        this.FirstName = firstName;
        this.LastName = lastName;
        this.Title = title;
        this.Email = email;
    }

    var viewModel = ko.validatedObservable({
        addSomeThingee: function () {
            if (!viewModel.isValid()) {
                viewModel.errors.showAllMessages();
                return false;
            } else {
                var newSomeThingee = new SomeThingee(this.Id(), 0, this.FirstName(), this.LastName(), this.Title(), this.Email());

                $.ajax({
                    url: '@Url.Action("AddSomeThingee")',
                    type: "POST",
                    data: ko.toJSON(newSomeThingee),
                    dataType: "json",
                    contentType: "application/json; charset=utf-8",
                    success: function (result) {
                        newSomeThingee.SomeThingeeId = result.message; 
                    },
                    error: function (result) {

                    }
                });

                    this.SomeThingees.push(newSomeThingee);
                }
        },
        removeSomeThingee: function (item) {
            this.SomeThingees.remove(item);
        }
    });

    $(function () {
        var jsonModel = '@Html.Raw(JsonConvert.SerializeObject(this.Model))';
        var mvcModel = ko.mapping.fromJSON(jsonModel);

        var myViewModel = new viewModel();
        var g = ko.mapping.fromJS(myViewModel, mvcModel);

        ko.applyBindings(g, document.getElementById("someDiv"));

    });

次の行でエラーが発生します。

this.SomeThingees.remove(item);

SomeThingees コレクションはモデル自体から提供されることに注意してください。add メソッドは問題なく機能しますが、remove メソッドは機能せず、上記のエラーが表示されます。私は何を間違っていますか?

4

2 に答える 2

5

問題は、バインディングがを呼び出すときに、clickview -model()ではなくdata-item()に設定されることです。これを回避する方法はいくつかあります。おそらく最も簡単なのは、バインディングの関数参照で使用することです。$root.removeIntervieweethis$data$rootbind

<a data-bind="click: $root.removeInterviewee.bind($root)" class="xOut"></a>

詳細については、このGithubの問題も参照してください。

于 2013-01-09T22:24:14.113 に答える
0

私は同じ問題を抱えていました。問題は、ビューモデル ($root) ではなくデータ項目 ($data) に設定されたバインディング呼び出しにありました。私は変わり<button data-bind="click: $root.(your delete function).bind($root)"></button>、私のために働きました!ありがとうマイケル・ベスト

于 2015-11-26T13:32:34.120 に答える