javascript - 与 knockout.js 我的错误作斗争

标签 javascript knockout.js

我担心这会像打字错误一样令人尴尬,但由于我坚持这一点并且非常绝望,我愿意自豪地付出代价。 ;)

这是我的情况:

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 部分:

一段时间后决定从头开始重做我的代码。它让我更进了一步。

代码现在停止在这些行的第二行(在“self.newTaskItem”中):

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

这两个可观察对象在我的 HTML 中是这样连接的:

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

最佳答案

看起来您的 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...
});

关于javascript - 与 knockout.js 我的错误作斗争,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19188367/

相关文章:

javascript - 附加 div 与表 thead th 元素内联

javascript - 出于某种原因,每个用户记录两次可投票选票

templates - 使用带有 knockout 的外部模板的最佳方法

jquery - 如何在 json 属性中执行函数?

javascript - 出现 'Uncaught Error: Unable to parse bindings' 错误,但代码有效

javascript - 诸如 "http://test:<a b>"之类的内容未显示在 IE 的文本区域中

javascript - 如何结合 Passport 和 Angular 用户界面路由

javascript - YouTube 滚动显示

javascript - Knockout 不同步选项的选定属性的手动设置

javascript - 通过 knockout 绑定(bind)禁用 select2 下拉菜单?