2012-07-04 84 views
3

我在下面有这个js和qunit测试。为什么浏览器给我的listClasses没有定义?如何解决它。我看到主要是javascript中的函数没有定义

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); 
}); 

回答

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名字只是下降默默。

+0

乔鲍曼:我尝试乌尔答案比它显示此错误未捕获的类型错误:对象[对象的对象]无方法“列表视图” 来源:\t http://137.57.1​​02.146:8080/Training/js/MRegisteredClasses。 js:23 – sone

+0

由于错误提示,由$('#list ul')返回的对象没有'listview()'函数。 listview在哪里定义? –

+0

$('#list ul')。listview();这是不是定义listview? – sone

1

a difference函数声明命名函数表达式

声明的形式为:

function myFunc() { 
    /* body */ 
} 

表达式是一切:

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

// or 

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

当一个函数表达式的function关键字后的名称,该功能是通过这个名字只能访问在功能体内部。因此你的问题。

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

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

更多的信息在Named function expressions demystified