2

これはタイプミスと同じくらい恥ずかしいことだと思いますが、私はこれに行き詰まっており、非常に必死なので、誇りを持って支払うつもりです. ;)

これは私の場合です:

Task = function (data) {
    var self = this;

    self.TaskId = data.TaskId;
    self.TaskName = ko.observable(data.TaskName);
}


ViewModel = function () {
    var self = this;
    self.Tasks = ko.observableArray(); 
    self.SelectedTask = ko.observable();
}


$.getJSON("/myService/GetAllTasks", 
    function (tData) {
        var mappedTasks = $.map(tData, function (item) {
            return new Task(item)
        });

        self.Tasks(mappedTasks); // Populate Tasks-array...
});


self.newTaskItem = function () {

    var newitem = new Task({
        TaskId: -1,
        TaskName: "enter taskname here"
    });

    self.Tasks.push(newitem);    // THIS ONE CRASH
    self.Tasks().push(newitem);  // BUT SUBSTITUTED WITH THIS ONE IT RUNS ON...
    self.editTaskItem(newitem);
};

self.editTaskItem = function (item) {

    self.SelectedTask(item);     // UNTIL TIL LINE WHERE IT CRASHES FOR GOOD...

    self.showEditor(true);  // makes Task-edior visible in HTML
};

ファイルに「self.SelectedTask.subscription」もありますが、コードから除外しても違いはありません。

また、データベース テーブルが空であるため、getJSON は MappedTasks にデータを返さず、self.Tasks() = [ ] のままであることにも言及する必要があります (Firebug によると)。

コード内の誤って閉じられたタグを修正しました。

パート2:

しばらくして、コードを最初からやり直すことにしました。それは私をさらに一歩進めました。

コードは次の行の 2 番目 (「self.newTaskItem」内) で停止します。

    self.Tasks.push(newitem);
    self.SelectedTask(newitem);  // Here it fails.

これら 2 つのオブザーバブルは、HTML で次のように接続されています。

<select data-bind="options: Tasks, optionsText: '$root.TaskName', value: SelectedTask"</select> 
4

3 に答える 3

2

ViewModel()関数が閉じられないようです。}関数宣言を終了させたい場所に終了を追加します。あなたがこれを望んでいるように(あなたのフォーマットに基づいて)私には見えます:

ViewModel = function () {
    var self = this;
    self.Tasks = ko.observableArray(); 
    self.SelectedTask = ko.observable();
}

$.getJsonさらに、通話を次のように終了する必要があります);

$.getJSON("/myService/GetAllTasks", 
    function (tData) {
        var mappedTasks = $.map(tData, function (item) {
            return new Task(item)
        });

        self.Tasks(mappedTasks); // Populate Tasks-array...
});
于 2013-10-04T18:37:54.727 に答える
1

あなたの問題が何であるか、またはどのようなエラーが発生しているのかは100%わかりませんが、これが私がすることです- Task = function を function Task に変更します -

function Task(data) {
    var self = this;

    self.TaskId = data.TaskId;
}

前に var を使用せずに Task = function と言うと、Task をグローバル名前空間に登録することになりますが、これは良い考えではありません。ビューモデルでも同じこと...できれば修正してください...

self.newTaskItem = function () {

    var newitem = new Task({
        // Your Task is looking for a TaskId, not a TextBatchId
        TaskId: 1
    });

    self.Tasks.push(newitem);
    self.editTaskItem(newitem);
};

また、Task オブジェクトが TaskId を探していると思われる TextBatchId を作成しています。それを修正するか、何らかの理由で意図的に実行している場合は、ビューコードを表示して、何が問題なのか、どのようなエラーが表示されるのかをよりよく説明してください。

于 2013-10-04T20:08:56.393 に答える