gpt4 book ai didi

javascript - 引用错误: obj is not defined using webcomponents & polymer

转载 作者:行者123 更新时间:2023-12-03 08:56:08 34 4
gpt4 key购买 nike

这是我使用 Web 组件的第一个项目,我充其量只是 js/jquery 的菜鸟,所以我不确定为什么会发生这种情况。

我在“search-form.html”中内置了一个自定义元素,然后我的所有组件和脚本都通过索引头部的主“components.html”引入...

index.html:

<head>
<meta charset='utf-8'>
<script src="/static/template/js/webcomponents.min.js"></script>
<link rel="import" href="/static/template/components/components.html">
<link rel="icon" type="image/png" href="/static/template/img/favicon.png">
</head>

组件.html:

<!-- POLYMER MUST BE LOADED -->
<link rel="import" href="/static/template/polymer/polymer.html">

<!-- TEMPLATE SCRIPTS -->
<link rel="import" href="/static/template/components/scripts.html">
<!-- Loads jquery and other scripts -->

<!-- TEMPLATE COMPONENTS -->
<link rel="import" href="/static/template/components/search-form.html">

然后 search-form.html 看起来像这样:

<!-- Defines element markup -->
<dom-module id="search-form">
<template>
<div class="input-prepend input-append">
<form id="search" method="get" action="/property/search">
<div class="btn-group">
<button id="search-type" class="btn btn-inverse dropdown-toggle" data-toggle="dropdown">
Search by
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a data-name="city" data-label="city">City</a></li>
<li><a data-name="zip" data-label="zip">Zip Code</a></li>
<li><a data-name="mls" data-label="mls">MLS Number</a></li>
</ul>
</div>
<input id="input-tag" class="input-xlarge" type="text" placeholder="Select a search type..." data-provide="typeahead" value="" />
<button type="submit" class="btn"><i class="fa fa-search"></i></button>
</form>
</div>
</template>

<script>
/********************************
/ TYPEAHEAD ARRAY
/*******************************/
var obj = {
"city" : [],
"zip" : [],
};

$(document).ready(function() {
/*dynamic zipcode*/
for(i=43000; i<=45999;i++){
obj.zip.push({val: i.toString(), string: i.toString()});
}
for(i=48000; i<=49999;i++){
obj.zip.push({val: i.toString(), string: i.toString()});
}
});

/********************************
/ SEARCH TYPEAHEAD FUNCTION
/*******************************/
$(function searchTag($) {

var data = [];

$('.dropdown-menu > li > a').on("click", function() {
data = $(this).data('name');
});

var that = this;
$('#input-tag').typeahead({
source: function(query, process) {
var results = _.map(obj[data], function(value) {
return value.val;
});
process(results);
},
highlighter: function(val) {
var value = _.find(obj[data], function(p) {
return p.val == val;
});
return value.string;
},
updater: function(val) {
var value = _.find(obj[data], function(p) {
return p.val == val;
});
that.setSelected(value);
return value.string;
}
});
this.setSelected = function(value) {
$('#input-tag').val(value.string);
//$('#input-tag').attr('data-value', value.val);
$('#input-tag').data('value', value.val);
};
});

/********************************
/ QUICK SEARCH TAG FUNCTION
/*******************************/
$(function () {

var caret = ' <span class="caret"></span>';

function searchSelect() {
$('.dropdown-menu > li > a').on("click", function() {
$('#search-type').html($(this).text() + caret);
$('#input-tag').attr('placeholder', $(this).data('label'));
$('#input-tag').attr('name', $(this).data('label'));
});
}searchSelect();
});

Polymer({
is: 'search-form',
created: function() {},
ready: function() {},
attached: function() {},
detached: function() {},
attributeChanged: function(name, type) {}
});
</script>
</dom-module>

因此 var obj 在 search-form.html 中声明

最后,由于我们后端的编写方式,我必须在 index.html 上运行一个循环来获取要在 var obj 中使用的数组“城市”:[],

看起来像这样:

/*TYPEAHEAD ARRAY*/ 
//MUST BE RUN FROM SHELL BECAUSE OF THE TMPL LOOP
<!-- TMPL_LOOP Cities -->
obj.city.push({val: "<!-- TMPL_VAR city_name -->", string: "<!-- TMPL_VAR city_name -->"})
<!-- /TMPL_LOOP -->

现在问题来了。这一切在 Chrome 中都可以正常工作,但我在 FF、IE11 和 Edge 中遇到相同的错误。该错误是:

ReferenceError: obj is not defined
obj.city.push({val: "ALLEN PARK", string: "ALLEN PARK"})

伙计,我希望我能很好地记录这一点,以便有人提供帮助,因为在转向堆栈之前我已经拉了我的头发好几个小时了:)

最佳答案

我认为当您访问index.html中的obj var时,导入尚未加载,因此此时obj未定义。由于 Chrome 本身支持 HTML 导入,因此导入会更早加载并在那里工作。将对 obj 的访问包装在 HTMLImports.whenReady(callback) 中。当所有 HTML 导入完成加载时,将调用回调。

HTMLImports.whenReady(function(){
<!-- TMPL_LOOP Cities -->
obj.city.push({val: "<!-- TMPL_VAR city_name -->", string: "<!-- TMPL_VAR city_name -->"})
<!-- /TMPL_LOOP -->
});

关于javascript - 引用错误: obj is not defined using webcomponents & polymer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32492648/

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