gpt4 book ai didi

zend-framework - Durandal:如何将配置数据从 HTML 主机传递到 ViewModel?

转载 作者:行者123 更新时间:2023-12-03 10:16:19 25 4
gpt4 key购买 nike

我正在使用 Zend 生成我的主视图主机。因此,它是唯一在服务器端解析的 HTML。我的服务器知道我想一直向下传递给我的一个 View 模型的配置参数。我不想让 viewmodel 通过 ajax 请求这些数据。

如何让我的 View 通过 main.js、shell 将数据传递到 durandal 中的 View 模型?

现在我在一个讨厌的全局中设置值,然后在我的 index.phtml 中的 View 模型中引用该全局:

    <script>
//This sucks, but i don't know how to pass stuff down into Durandal yet...
//
window.ServiceRoot = "<?=$this->contentRoot?>";
</script>

在一个直接的 KO 应用程序中,我只是将它传递给 KO viewmodel 构造函数(或设置一个可观察的属性)。

从技术上讲,我使用的是 durandal 2.0 预发行版,但我认为这并不重要。我想我需要通过 require.js 脚本标签传递参数,就像我会主要参数一样。

最佳答案

我建议您添加一个 config.js 模块来保存您的“配置”数据。添加一个初始化函数以从服务器获取配置数据并缓存它。

然后... 在你的 shell.js 的激活函数中,在绑定(bind)你的 View 之前初始化配置。

然后,您可以在所有 View 模型中要求您的配置模块,它只会返回缓存的数据。

config.js

define(['dataaccessmodule'], function (dataaccessmodule) {
var config =
{
serviceRoot: null,
init: init
};

var init= function()
{
// get config from server and set serviceRoot;
// return a promise
};
return config;
});

shell.js
define([... your required modules..., 'config'],
function (..., config) {

function activate() {
return config.init().then(boot);
};
function boot() {
// set up routing etc...

// activate the required route
return router.activate('home');
};
});

someViewModel.js
define([... your required modules..., 'config'],
function (..., config) {
var someViewModel =
{
serviceRoot: config.serviceRoot
};

return someViewModel;
});

我知道你说过你不想通过 ajax 加载数据,但是使用这种方法,你只会加载一次并重新使用它。如果需要,您还可以加载额外的配置。这使用单一职责原则很好地分离了代码。

编辑:

如果您真的需要在渲染页面中执行此操作,您可以按照以下方式执行操作:
<script>
var myapp = myapp || {};

myapp.config= (function() {

var contentRoot = "<?=$this->contentRoot?>";
return {
contentRoot: contentRoot
};
})();
</script>

然后,在您的 main.js 中,在定义主模块之前,您可以使用以下方法将其短路:
define('appconfig', [], function () { return myapp.config; });

然后,您可以像往常一样在 viewmodel 中要求 appconfig 模块,并使用 appconfig.contentRoot 访问 contentRoot。

关于zend-framework - Durandal:如何将配置数据从 HTML 主机传递到 ViewModel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17799521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com