0

returnDayNumber というグローバル メソッドに問題があります。Java スクリプト内で関数を呼び出すと、正常に動作します。しかし、関数を呼び出すボタンを作成すると、「self.returnDayNumberは関数ではありません」と表示されました( var self=this で問題が解決する可能性があります)。ここに私のコードがあります:

 /*
     * Global data
     * used to centralize user data to be used in graphs
     */
    var userModel = new userHealthModel();
    userModel.createUsers();

    userModel.addUser();


    var newChart = new NewHighCharts();

    returnDayNumber = function(month, day)
    {
        if(month==1)
        {
            return day;
        }
        else if(month==2)
        {
            return(31+day);
        }
        else if(month==3)
        {
            return(60+day);
        }
        else if(month==4)
        {
            return (91+day);
        }
        else if(month==5)
        {
            return(121+day);
        }
        else if(month==6)
        {
            return(152+day);
        }
        else if(month==7)
        {
            return(182+day);
        }
        else if(month==8)
        {
            return(213+day);
        }
        else if(month==9)
        {
            return(244+day);
        }
        else if(month==10)
        {
            return(274+day);
        }
        else if(month==11)
        {
            return(305+day);
        }
        else if(month==12)
        {
            return(335+day);
        }           
    }
    saveThis = function()
    {
        var self = this;
        alert("your about to save!")
        newChart.destroyChart();
        newChart= new NewHighCharts();
        var numberOfUsers = userModel.users().length;
        var users = userModel.users();
        var weights = userModel.getWeights();
        var dates = userModel.getDates();
        var dataArray = [];
        var xAndY = []
        var singleDate;
        var name;
        for(var i=0;i<numberOfUsers;i++)
        {
            name = users[i].name;
            xAndY = [];
            for(var x=0;x<dates.length-1;x++)
            {

                //extract month
                var month = ([dates[i][x]].toString()).substring(0,2);
                //extract day
                day = parseInt(([dates[i][x]].toString()).substring(3,5));
                //add the day number and weight of users to an array of x and y coordinates
                xAndY.push([self.returnDayNumber(month,day),weights[i][x]])
            }
            newChart.addNewSeries(name,xAndY);
        }       
     ///!!!!This works!!!///
     this.saveThis()//!!!

    }
    ko.applyBindings(userModel);

KO ユーザー モデルを作成しましたが、関連性があるとは思いません。これが私のHTMLです。KO構文に注意してください。ただし、機能します。

<button  data-bind="click: saveThis">Save</button>

おそらく単純な間違いを犯しているか、何かが範囲外です。Javaスクリプト初心者なので、素朴な質問で申し訳ありません。親切なプログラマーに感謝します。

4

1 に答える 1

1

var self = this;関数の内側ではなく外側に移動します。saveThisその方法selfは正しいスコープ内にあります。

于 2012-04-06T03:41:37.080 に答える