主函数如下,这将导致'setState'不是有效的属性异常。 api.js的如何将'this'对象传递给使用协议的函数中调用的回调函数apply
componentWillMount = function() {
api.daysOfMonth(this, this.props.month, this.props.year, function (ds) {
var days = [];
ds.forEach(function (jsonDay) {
var day = {date: jsonDay.date, inRange: jsonDay.inRange};
days.push(day);
});
this.setState({ daysOfMonth: days });
});
片段是以下。 主函数调用Api.daysOfMonth(...),Api.daysOfMonth将使用全局对象来调用ajax方法并使用protocol apply调用回调函数,回调函数是从main函数传入的,如上脚本。
ApiImpl = (function() {
function ApiImpl() { }
ApiImpl.prototype.invoke = function (callerObj, callback, action) {
var params = [];
for (var _i = 3; _i < arguments.length; _i++) {
params[_i - 3] = arguments[_i];
}
params.push(callback); //push callback function into params, so object of QWebChannel can callback the function after execute the 'action'
if (typeof window['api'] === 'undefined') {
new QWebChannel(qt.webChannelTransport, function (channel) {
window['api'] = channel.objects.api;
var func = window['api'][action].bind(callerObj);
return func.apply(callerObj, params); //here goes error
});
}
var func = window['api'][action].bind(callerObj);
return func.apply(callerObj, params); //here goes error
};
return ApiImpl;
}());
Api = (function() {
function Api() {
}
Api.daysOfMonth = function (callerObj, month, year, callback) {
this.impl.invoke(callerObj, callback, 'daysOfMonth', month, year);
};
return Api;
}());
Api.impl = new ApiImpl();
exports_1("Api", Api);
你想'这个'是什么? 'jsonDay'? – zer00ne