我的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'" />