无法将功能绑定到按钮单击

时间:2015-07-06 16:14:17

标签: javascript asp.net knockout.js

我有一个带函数的viewModel

 function resetForm(){
        loanSystem("lis");
        status("");
        processor("");
        fileType("funded");
        orderDate("");
        loanNumber("");
        team("");
        borrower("");
        tracking("");
    };

页面上带有

的按钮
 <button type="reset" data-bind="click: resetForm">Reset</button>

但我收到错误:

  

无法处理绑定&#34;点击:function(){return resetForm}。 resetForm未定义。

但我知道我的resetForm()有效,因为它是在init function中调用的,如果我在resetForm()中更改了初始页面加载时显示的值。有什么想法吗?

&#13;
&#13;
var homeViewModel = (function () {
    var loanSystem = ko.observable("lis");
    var status = ko.observable("");
    var processor = ko.observable("");
    var fileType = ko.observable("funded");
    var orderDate = ko.observable("");
    var loanNumber = ko.observable("");
    var team = ko.observable("");
    var borrower = ko.observable("");
    var tracking = ko.observable("");
    var isLoanSystem = ko.computed(function () {
        return (loanSystem() == "lps");
    });
    var isCalendar = ko.computed(function () {
        return (isLoanSystem() && fileType() == "cancelled");
    });

    function resetForm(){
        loanSystem("lis");
        status("");
        processor("");
        fileType("funded");
        orderDate("");
        loanNumber("");
        team("");
        borrower("");
        tracking("");
    };

    function submitFileInformation() {
        if (!ValidInputs()) {
            return;
        }
        var fileData = {
            loanSystem: loanSystem(),
            status: status(),
            processor: processor(),
            fileType: fileType(),
            orderDate: orderDate(),
            loanNumber: loanNumber(),
            team: team(),
            borrower: borrower(),
            tracking: tracking()
        };

        $.ajax({
            type: "POST",
            url: "/ComplianceProcessing/Ajax.ashx",
            data: JSON.stringify(fileData),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(data) {
                if (data === false) {
                    alert("There was an error writing the file to the database.");
                    return;
                }
                alert('Data has been successfully saved.');
                resetForm();
            },
            failure: function() {
                alert('Failure');
            }
        });
    }

    return {
            init: function() {
                resetForm();
            },
            loanSystem: loanSystem,
            isLoanSystem: isLoanSystem,
            status: status,
            processor: processor,
            fileType: fileType,
            isCalendar: isCalendar,
            orderDate:orderDate,
            loanNumber: loanNumber,
            team: team,
            borrower: borrower,
            tracking: tracking
        };
    })(); 
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

你的resetForm没有从你的viewmodel中删除,这使得它只是私密的,所以Knockout无法找到它。

解决方案非常简单,只需在退回的对象中包含resetForm(这是您的&#34;公共API&#34;):

return {
            init: function() {
                resetForm();
            },
            loanSystem: loanSystem,
            isLoanSystem: isLoanSystem,
            status: status,
            processor: processor,
            fileType: fileType,
            isCalendar: isCalendar,
            orderDate:orderDate,
            loanNumber: loanNumber,
            team: team,
            borrower: borrower,
            tracking: tracking,
            resetForm: resetForm //add this line
        };