目前将硬编码的“/video/vid1.MP4”推送到列表中,并为所有项目显示此URL。我想在“内容”下显示我在Javascript2中定义的变量。
HTML:
<video id=vid src='#' data-win-bind="src: videoUrl" />
JavaScript1:
for (var i = 0; i <= this._items.length; i++) {
list.push({ videoUrl: '/video/vid1.MP4' });
}
这用于在不同视图中生成数据! 我想将存储在内容中的变量调用到videoUrl下面的javascript中。
JavaScript2:
var video = "/video/vid.mp4";
var sampleItems = [
{ group: sampleGroups[0], content: video},
{ group: sampleGroups[0],content: video},
{ group: sampleGroups[0], content: video}
];
基本上我想使用'内容'而不是硬编码的网址。我想将信息从一个JavaScript文件传送到另一个JavaScript文件。
例如。 list.push({videoUrl:content});
答案 0 :(得分:0)
您是否尝试将每个项目从sampleItems数组推送到名为list的新数组?
如果是这样的话:
for (var i = 0; i <= this._items.length; i++) {
list.push({ videoUrl: this._items[i].content });
}
但是,如果this._items
与sampleItems
不同,您可以像访问任何数组一样访问sampleItems中的项目。 sampleItems[0]
为您提供数组中的第一个对象。在这种情况下,它是:
{ group: sampleGroups[0], content: "/video/vid.mp4"}
此对象有两个属性&#39; group&#39;和&#39;内容&#39;可以这样访问:
sampleItems[0].content
编辑:
您还需要修复for循环,这样就不会尝试以大于其长度的索引访问数组。
for (var i = 0; i < this._items.length; i++) {
答案 1 :(得分:0)
如果我理解这一点,你是JavaScript的新手,并不熟悉变量范围的工作。
默认情况下,您在函数范围之外定义的任何内容都会添加到全局命名空间中,并且可以从项目中的任何文件中使用JavaScript(只要它在相同的脚本上下文中运行 - 所以不在iframe / webview中)或WebWorker)。
但是,最好(也是最常见)的做法是使用模块模式为每个JS文件创建文件范围。 WinJS模板执行此操作,因此您可能在不知情的情况下遵循此模式。如果您这样做,您的文件可能如下所示:
(function () {
// All your code
})();
结果是“所有代码”部分中的所有变量和函数都限定在此文件中。这是一件好事。
如果要在此文件范围之外公开某些内容,则需要将其附加到某个地方的全局范围,以便可以通过其他位置运行的代码访问它。最简单的方法是将其附加到全局“窗口”对象。所以,你可以写:
window.myVideoList = list;
然后myVideoList将随处可用(前面有或没有显式的“window。”)。
但是,对于这种事情,更好的模式是定义名称空间。这些实际上只是窗口外的对象,而后者又附加了更多的对象(或更多的命名空间对象)。由于看起来您正在使用WinJS库,因此您可以使用WinJS.Namespace工具。例如,在第一个文件的末尾(但在封闭的函数范围内),您可以写:WinJS.Namespace.define("DataModel", {
videoList: list,
});
然后在你的另一个档案中写下:
{ content: DataModel.videoList[0] } or whatever.
或者,或者,您可以公开构建并返回它的“getVideoList”函数,或者其他任何东西。
希望有所帮助!