Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在作为成功回调传递给getJSON的方法中引用我的对象?_Javascript_Jquery_Scope - Fatal编程技术网

Javascript 如何在作为成功回调传递给getJSON的方法中引用我的对象?

Javascript 如何在作为成功回调传递给getJSON的方法中引用我的对象?,javascript,jquery,scope,Javascript,Jquery,Scope,在我的模型中,我成功地加载了一些JSON,之后我只需向正在侦听JSON的人发送一个事件,说明JSON已加载 我的问题是范围。我发现“main”能够成功侦听模型(使用jQuery的触发器方法)的唯一方法是在作用域变量(在函数模型(ApplicationModel)中)前面加上jQuery别名 我的直觉是,在这种情况下,我可能缺少了一种处理范围的不那么混乱的方法 main: require( [ "jquery", "models/applicationModel", "views/applicat

在我的模型中,我成功地加载了一些JSON,之后我只需向正在侦听JSON的人发送一个事件,说明JSON已加载

我的问题是范围。我发现“main”能够成功侦听模型(使用jQuery的触发器方法)的唯一方法是在作用域变量(在函数模型(ApplicationModel)中)前面加上jQuery别名

我的直觉是,在这种情况下,我可能缺少了一种处理范围的不那么混乱的方法

main

require( [ "jquery", "models/applicationModel", "views/applicationView" ], function( $, ApplicationModel, ApplicationView ) {

var appModel = new ApplicationModel();

$( appModel ).on( "jsonLoaded", onJsonLoaded );
appModel.getJson();

function onJsonLoaded( e, data ) {
    console.log('main: onJsonLoaded', data );
}

});
define( [ "jquery" ], function( $ ) {

function Model() {
    $scope = this;
};

Model.prototype.getJson = function() {
    $.getJSON( "/getTextfields", this.loadSuccess );
};

Model.prototype.loadSuccess = function( data ) {
    console.log('loadSuccess', data );
    $( $scope ).trigger( "jsonLoaded", [ data ] );
} 

return Model;
});
应用程序模型

require( [ "jquery", "models/applicationModel", "views/applicationView" ], function( $, ApplicationModel, ApplicationView ) {

var appModel = new ApplicationModel();

$( appModel ).on( "jsonLoaded", onJsonLoaded );
appModel.getJson();

function onJsonLoaded( e, data ) {
    console.log('main: onJsonLoaded', data );
}

});
define( [ "jquery" ], function( $ ) {

function Model() {
    $scope = this;
};

Model.prototype.getJson = function() {
    $.getJSON( "/getTextfields", this.loadSuccess );
};

Model.prototype.loadSuccess = function( data ) {
    console.log('loadSuccess', data );
    $( $scope ).trigger( "jsonLoaded", [ data ] );
} 

return Model;
});

修改模块,使其执行以下操作:

define( [ "jquery" ], function( $ ) {

function Model() {
    // Cache $(this) so that we don't call jQuery all the time.
    this.$this = $(this);
};

Model.prototype.getJson = function() {
    // Use bind so that `this` has the proper value in `loadSuccess`.
    $.getJSON( "/getTextfields", this.loadSuccess.bind(this) );
};

Model.prototype.loadSuccess = function( data ) {
    console.log('loadSuccess', data );
    // Used the cached `$this` rather than recomputing.
    this.$this.trigger( "jsonLoaded", [ data ] );
} 

return Model;

});

这里的关键是使用。它创建了一个新函数,
this
的值设置为传递给
bind

的第一个参数,您在哪里定义
$scope
?$scope在函数模型中定义,在上面的应用程序模型中。不过,下面的解决方案是由Louis提供的。嗨,Louis,谢谢你的回答,你的回答很清楚,很有效,而且比我使用的解决方案更有意义。