[英]How to get the value out of Knockout function
我正在使用Knockout,正在尝试构建将返回值的函数,问题是我正在计算内部函数中的值,但找不到从该函数中获取值的方法。
那就是我到目前为止
JS
var vm = {
myResponse: ko.observable(),
computedValue: ko.observable()
};
vm.myResponse.subscribe(function (newValue) {
myfunction(computedValue);
});
var myfunction = function (observableToUpdate) {
var responses = request.responses();
return changeUp.getUserInfo().then(function (userInfo) {
var currentResponse = ko.utils.arrayFirst(responses, function (r) {
return r.userName === userInfo.userName;
});
var responseindex = responses.indexOf(currentResponse);
observableToUpdate({
responeIndex: responseindex
});
});
};
在我的html上,我使用以下行
<tbody data-bind="foreach: request.responses()">
<tr data-bind="css: { responder : $parent.vm}">
<td>{{since()}}</td>
<td>{{amount|number}}</td>
<td>{{rate|number}}</td>
<td>{{distance}}</td>
<td>
<a data-bind="click: action">{{_t('Details')}}</a>
</tr>
</tbody>
当前非get类响应者。 我只想在isMyResponse中的条件为true时添加它;
使用异步回调设置可观察项的唯一方法是使用订阅。 计算出的敲除期望有一个同步返回值。
在“ then”回调触发之前,您的函数已完成执行。
var someObservable = ko.observable();
var computedValue = ko.observable();
someObservable.subscribe( function( newValue ) {
changeup.getUserInfo().then( function(userInfo) {
...
computedValue(myRespondIndex);
});
} );
同样,“然后”回调返回值仅影响promise的调用链。 如果引发异常,则将触发fail回调,并且不会调用任何链接的“ then”回调。 返回的值不会通过回调“级联”。
对于UserID = 'undefined'
,我认为第一个then
函数的结果将传递给第二个then
函数。 第二个then
函数的结果将undefined
因为未返回任何内容。 我认为可能应该是这样的:
this.isMyResponse = function(index) {
var test ;
var responses = this.request.responses();
var useriD = changeup.getUserInfo().then(function (userInfo) {
var currentResponse = ko.utils.arrayFirst(responses, function (r) {
return r.username === userInfo.username;
});
var myRespondIndex = responses.indexOf(currentResponse);
test = myRespondIndex;
console.log("inside" + test);
return myRespondIndex;
}).then (function (index) {
console.log("outside" + test);
return index;
});
console.log("outside" + test);
return test;
}
编辑
以下jsFiddle是我试图确认Robert Stanley在告诉我的内容。 最后,我按照他的建议实施了解决方案。
http://jsfiddle.net/gonefishern/zdDh9/
正如罗伯特·斯坦利(Robert Stanley)向我指出的那样,以下JavaScript将返回一个Promise,但不是我认为它要去的值。
var isMyResponse = function(observableToUpdate) {
var responses = this.request.responses();
return changeup.getUserInfo().then(function (userInfo) {
var currentResponse = ko.utils.arrayFirst(responses, function (r) {
return r.username === userInfo.username;
});
return {
responeIndex: responses.indexOf(currentResponse),
userInfo: userInfo
};
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.