更改已使用的可观察值 - 延期承诺?

时间:2016-11-14 10:50:02

标签: knockout.js promise durandal

我的Durandel / knockout应用使用配置文件来设置主机网址等值。我希望能够在登录时选择更改此主机URL。我已将正确的KO添加到我的登录viewmodel和登录视图以更改主机URL。问题是这实际上并没有在登录提交时更改主机。原因是在我们登录之前读取并使用了主机URL。

这是应用程序此刻的旅程。更改login.js / login中的可观察值不会返回并更改pathservice.js处的值 我需要pathservice.js来查看login.js的值,但是login.js不会在没有pathservice的情况下加载,并且pathser就看不到login.js中的值,因为该视图还不存在。

配置值> pathservices.js>其他一些路线> login.js

有什么建议吗?这是运行顺序中提到的代码的淡化版本。

ConfigValues.js -

define(
    function(){
        return {
            dateTimeFormat: "ddd Do MMM YYYY, HH:mm",
            logHttpRequests: true,
            logHttpResponses: true,
            offlineLoginOnly: false,
            requestTimeout: 120000,
            Host: "http://myurl.com",
            Path: "services/v1-0",
            ssoEnabled: true,
            useTestPDF: false,
            versionNumber: ''
        };
    }
);

pathservices.js -

define(
    [
        'uri',
        'configValues'
    ],
    function(
        uri,
        config
        ){

        // this comes before I can change the observable
        var Root = config.Host;


                return {

                //various returns that build up the app
        };
    }
);

login.js -

define([
    'configValues',
    'lodash',
    'viewmodels/shell',
    'knockout',
    'plugins/router',
    'durandal/app',
    'jquery',
    'services/pathService',
], function (
    config,
    _,
    shell,
    ko,
    router,
    app,
    $,
    pathService,
) {


    //below added in to observe and change view input but its too late
    var hostUrlChange = ko.observable();
    hostUrlChange(config.Host);

        return {
        activate: function() {
            shell.showNav(true);
        },

        hostUrlChange: hostUrlChange,
    };
});

login.html -

<input type="text" data-bind="value: hostUrlChange, valueUpdate: 'afterkeydown'" />

0 个答案:

没有答案