我想从模板创建一个javascript对象.问题是我不知道模板事先会是什么样子.举个简单的例子,如果我有模板功能
template = function (data) {
return {
title: data.title
}
}
Run Code Online (Sandbox Code Playgroud)
然后我可以跑去template({ title: "Steve" })取回物体
{ title: "Steve" }
Run Code Online (Sandbox Code Playgroud)
因为data.title直到我调用模板函数才进行评估.但是我正在构建一个基于用户输入的对象,其中字段名称事先是未知的,并且可以深深嵌套在对象中的任何位置.
如果我定义了事先返回的对象,那么data.title示例中的字段已经被评估,并且不会使用输入数据.例如,我希望能够像模板一样定义模板对象
obj = { title: this.title }
Run Code Online (Sandbox Code Playgroud)
然后将模板重新定义为
template = function () {
return obj
}
Run Code Online (Sandbox Code Playgroud)
并打电话template.call({title:"Steve"}).但目前我回来了
{ title: undefined }
Run Code Online (Sandbox Code Playgroud)
因为this.title我定义时已经评估过了obj.也许我正在以错误的方式接近这个,因为我不断得出结论,我必须通过字符串化修改函数,修改字符串以包含未评估的代码this.title并从字符串创建新函数.但这似乎是一个非常可怕的想法.
遍历对象寻找要替换的特殊值似乎既昂贵又复杂.我也找了一些javascript对象模板库,但没有找到任何东西.
编辑:为了更清楚地表明输入数据和模板结构不一定匹配,我可能想要一个看起来像的模板
template = function (data) {
return {
name: "Alfred",
stats: {
age: 32,
position: {
level: 10,
title: data.title
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试从 S3 加载一个视频,该视频当时可能正在转码,也可能没有转码。当它仍在处理时,我收到 403 响应。我测试的所有其他浏览器(Chrome/Firefox/IE)都会触发“错误”事件,这样我就可以向用户显示一条消息,如下所示:
var video = document.createElement('video');
video.onerror = function (e) {
// Show the user a message...
};
video.src = videoURL;
Run Code Online (Sandbox Code Playgroud)
但 Safari(在 OSX 上)只是记录到控制台而不触发事件。
无法加载资源:服务器响应状态为 403(禁止)
如果我将 video.src 设置为垃圾 URL,不会导致任何结果,但不会触发 403,它将触发。
是否有其他我可以监听的事件或其他方式来警告用户?我知道我可能可以对视频发出单独的 ajax 请求并检查响应,但我想避免开销。
javascript safari html5-video http-status-code-403 dom-events
我有一个HTML表单
<form name="radio-mc">
<input type="radio" name="mc" id="radio-1" value="1"> First
<input type="radio" name="mc" id="radio-2" value="2"> Second
<input type="radio" name="mc" id="radio-3" value="3"> Third
</form>
Run Code Online (Sandbox Code Playgroud)
我可以使用以下javascript通过表单/输入名称在Chrome中获取所选值
document.forms['radio-mc']['mc'].value
Run Code Online (Sandbox Code Playgroud)
但在Firefox中,价值未定义.
我通常认为这是Chrome的专长,但在Firefox检查器中,我可以看到父对象是一个[object NodeList]具有value属性的对象.它根本就没有任何东西......看似永远.
在这种情况下我不能使用jQuery.有没有办法在Firefox中的vanilla javascript中获取一个值(没有像我在Chrome中那样迭代单选按钮)?
javascript ×3
dom-events ×1
firefox ×1
forms ×1
function ×1
html ×1
html5-video ×1
json ×1
object ×1
radio-button ×1
safari ×1
templates ×1