4

私はこのjsとqunitのテストを以下に持っています。なぜブラウザからlistClassesが定義されていないのですか?それを解決する方法。私はほとんど見ました

function ajax() {  
$.ajax({   
});}

しかし、私が以下のようにテストを行う方法が好きだった場合はどうなりますか?

$('#MregisteredClasses').on('pageinit', function listClasses(){
var rowInput = "1";
var pageInput = "1";

$.ajax({
    url: 'http://137.57.102.146:8080/Training/getRegisteredClassesData.html',
    data: ( {rows : rowInput , page : pageInput}),
    type: 'POST',

    success: function(json_results){
    $('#list').append('<ul data-role="listview" data-inset="true"</ul>');
        listItems = $('#list').find('ul');
        $.each(json_results.rows, function(key) {
            html = "<li data-mini='true' id='icon'><a href='http://137.57.102.146:8080/Training/MRegisteredClassesDetail.phone?courseId=" 
                   + [json_results.rows[key].courseId] + "&regNo=" + [json_results.rows[key].regNo] +
                   "' rel='external'>" + json_results.rows[key].courseName+ "</a>"
                   + "<a href='http://137.57.102.146:8080/Training/MRateCourse.phone?courseId=" 
                   + [json_results.rows[key].courseId] + "&regNo=" + [json_results.rows[key].regNo] + 
                   "' rel='external'>RATE THIS COURSE</a></li>" ; 
            listItems.append(html); 
        });

        $('#list ul').listview(); 
    },
});
});

これはqunitテストです

 test('asynchronous test', function() {  
// Pause the test, and fail it if start() isn't called after one second  
stop();  

listClasses(function() {  
    // ...asynchronous assertions  
    ok(true, "Success"); 
});  

setTimeout(function() {  
    start();  
}, 2000);  
});  
4

2 に答える 2

2

関数宣言名前付き関数式には違いがあります。

宣言の形式は次のとおりです。

function myFunc() {
    /* body */
}

式は他のすべてです:

var x = function myFunc() {
    /* body */
};

// or

alert(function myFunc() {
    / * body */
});

関数式にfunctionキーワードの後に​​名前がある場合、関数は関数本体内でのみこの名前でアクセスできます。したがって、あなたの問題。

var x = function myFunc() {
    /* body */
};

x(); // okay
myFunc(); // reference error

名前付き関数式の詳細については、わかりやすく説明しています。

于 2012-07-04T07:31:44.600 に答える
0

$('#MregisteredClasses').on('pageinit', function listClasses(){ ...間違った使用法です。

関数は匿名である必要があります(つまり、listClassesビットを削除します)。その場合、実行listClasses()は失敗します。

あなたがする必要があるのは、関数宣言を外部化することです。

すなわち:

function listClasses(){
  var rowInput = "1";
  var pageInput = "1";

  $.ajax({
    url: 'http://137.57.102.146:8080/Training/getRegisteredClassesData.html',
    data: ( {rows : rowInput , page : pageInput}),
    type: 'POST',

    success: function(json_results){
    $('#list').append('<ul data-role="listview" data-inset="true"</ul>');
        listItems = $('#list').find('ul');
        $.each(json_results.rows, function(key) {
            html = "<li data-mini='true' id='icon'><a href='http://137.57.102.146:8080/Training/MRegisteredClassesDetail.phone?courseId=" 
                   + [json_results.rows[key].courseId] + "&regNo=" + [json_results.rows[key].regNo] +
                   "' rel='external'>" + json_results.rows[key].courseName+ "</a>"
                   + "<a href='http://137.57.102.146:8080/Training/MRateCourse.phone?courseId=" 
                   + [json_results.rows[key].courseId] + "&regNo=" + [json_results.rows[key].regNo] + 
                   "' rel='external'>RATE THIS COURSE</a></li>" ; 
            listItems.append(html); 
        });

        $('#list ul').listview(); 
    }
});
}

次に、onコマンドから関数を呼び出します。

$('#MregisteredClasses').on('pageinit', listClasses)

スクリプトがで失敗しただけlistClasses()だとすると、listClasses名前は黙って削除されたと思います。

于 2012-07-04T07:21:58.033 に答える