在淘汰赛中获得错误

时间:2012-10-08 05:24:15

标签: knockout.js sammy.js

我收到以下错误:

错误:无法解析绑定。 消息:ReferenceError:未定义UpdateStatus; 绑定值:选中:状态,禁用:状态,单击:UpdateStatus

这是我的javascript代码

function WebmailViewModel() {
// Data
var self = this;
self.days = ['2012-10-01', '2012-10-02', '2012-10-03', '2012-10-04', '2012-10-05', '2012-10-06', '2012-10-07'];
self.choosenDateId = ko.observable();
self.choosenDateGoal = ko.observable();
self.choosenGoalId = ko.observable();

self.UpdateNote = ko.computed(function () {
    $.ajax({
        type: "POST",
        url: 'SinglePageApp.aspx/UpdateNote',
        data: "{goalId:9423}",
        contentType: "application/json; charset=utf-8",
        success: function (result) {
            alert(result.d);
        }
    });
});

self.UpdateStatus = ko.computed(function () {
    $.ajax({
        type: "POST",
        url: 'SinglePageApp.aspx/UpdateStatus',
        data: "{goalId: 9423}",
        contentType: "application/json; charset=utf-8",
        success: function (result) {
            alert(result.d);
        }
    });
});

// Behaviours    
self.gotoDay = function (days) { location.hash = days };

// Client-side routes    
Sammy(function () {

    this.get('#:days', function () {          
        self.choosenDateId(this.params.days);

        debugger;
        $.ajax({
            type: "POST",
            url: 'SinglePageApp.aspx/GetGoals',
            data: "{goalDate:'" + this.params.days + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (msg) {
                self.choosenDateGoal(msg.d);

                alert("success");
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                alert(textStatus);
                alert(errorThrown);
            }
        })
    });
    this.get('', function () { this.app.runRoute('get', '#2012-10-04') });
}).run();
};

ko.applyBindings(new WebmailViewModel());

提前致谢

1 个答案:

答案 0 :(得分:0)

我相信你的问题是你在错误的意义上使用计算的observable。如果你想要一个函数被调用(就像你想要的那样,因为你将它绑定到一个点击绑定),只需将其声明为

self.<function Name> = function(< passed variables>){
    //Code to be done when this function is called.
};

计算的位置更多用作变量。因此,如果只有传递给计算的函数,则将其视为只读变量。您可以指定计算机是可读写的,但是您必须提供读写函数,如:

self.<computed Name> = ko.computed(function(){
    read: function () {
        // return how you want this computed to be displayed.
    },
    write: function (value) {
        // How do you want this to be saved.
    },
});

此外,计算的observables意味着在函数中使用现有的observable。这样,只要更新在计算的observable中使用的可观察量,就会调用计算的函数。有关示例和更多信息,请参阅computed observable documentation