簡體   English   中英

如何從淘汰賽功能中獲取價值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM