如何在此示例中获取对象上下文?

时间:2014-02-13 10:23:36

标签: javascript jquery

 var viewModel = function (utils) {
        this.x="GNC";
        this.tbl = null; }; viewModel.prototype.saveCords=function(){   alerts(this.x); };

$(function(){

var objViewModel=new viewModel();

$('#btnSaveCords').on('click',objViewModel.saveCords); // this is suppose to alert "GNC", but it doesnt

});

那么,我如何在saveCords而不是按钮上下文中获取对象上下文?

2 个答案:

答案 0 :(得分:1)

问题是默认情况下,事件处理程序方法将上下文作为处理程序所针对的dom元素,您需要将其更改为自定义对象。

使用$.proxy()将自定义执行上下文传递给事件处理程序方法。(您可以使用Function.bind()但IE中没有支持< 9)

var viewModel = function (utils) {
    this.x = "GNC";
    this.tbl = null;
};
viewModel.prototype.saveCords = function () {
    alert(this.x);
};

$(function () {

    var objViewModel = new viewModel();

    $('#btnSaveCords').on('click', $.proxy(objViewModel.saveCords, objViewModel)); // this is suppose to alert "GNC", but it doesnt

});

演示:Fiddle

答案 1 :(得分:0)

您应该放置参数

var objViewModel=new viewModel(utils_param_here); //here defined in function utils

完整代码:

var viewModel = function (utils) {
        this.x="GNC";
        this.tbl = null; }; viewModel.prototype.saveCords=function(){   alerts(this.x); };

$(function(){

var objViewModel=new viewModel(this);

$('#btnSaveCords').on('click',objViewModel.saveCords); // this is suppose to alert "GNC", but it doesnt

});