未捕获的类型错误:无法调用未定义的下划线.js的方法“替换”
Uncaught TypeError: Cannot call method 'replace' of undefined underscore.js
我是backbone.js
和underscore.js
的新手。
.HTML:
<div id="cartlist">
<script type="text/template" id="cart_template">
</script>
</div>
我在哪里调用视图文件:
<script type="text/javascript" src="webcore/views/CartView.js"></script>
</body>
JS函数(它与javascript项目配合得很好):
function Cart(){
......
this.showCart = function (){
var item = deserializeJSONToObj(window.localStorage.getItem(Cart.storageName));
var str = '<table id="showcart">';
str += '<tr><td class="cartitemhead">Item to buy</td><td class="cartitemhead" style="text-align: center;">Quantity</td></tr>';
$.each(item, function(i, item) {
str += '<tr><td><table class="verticallist"><tr><td rowspan="4" style="width: 120px;"><img src="' + item.PictureName + '" alt="Product" width="95px"/></td><td style="font-weight: bold;">'+trimString(item.Name,50)+'</td></tr><tr><td><i>Available in Stock(s)!</i></td></tr><tr><td><i>Rating: 650Va-390w Input: Single</i></td></tr></table></td><td class="centertxt">'+item.QuantityInCart+'</td></tr>';
});
str += '</table>';
return str;
}
这是视图:
var myCart = new Cart();
CartList = Backbone.View.extend({
initialize:function(){
this.render();
},
render: function(){
var template = _.template( $("#cart_template").html(), {} );
this.$el.html( template );
}
});
var cart_view = new CartList({ el: $("#cartlist").html(myCart.showCart()) });
当我尝试调用视图模板时,出现错误
Uncaught TypeError: Cannot call method 'replace' of undefined - underscore.js
.请帮助我找到错误。如何将类
str
字符串转换为underscore.js
template
Cart
.
任何帮助将不胜感激,谢谢。
我猜你的问题是你在DOM中存储#cart_template
的位置:
<div id="cartlist">
<script type="text/template" id="cart_template">
</script>
</div>
您可以像这样创建CartList
:
var cart_view = new CartList({ el: $("#cartlist").html(myCart.showCart()) });
当你这样说时:
$("#cartlist").html(myCart.showCart())
#cartlist
里面的一切都消失了,特别是#cart_template
消失了。然后在 CartList
中,您尝试这样做:
_.template( $("#cart_template").html(), {} );
但是在这一点上没有更多的#cart_template
,所以$('#cart_template').html()
undefined
这就是你的错误来源:_.template
会在内部调用replace
,但你把它作为模板而不是字符串undefined
。
解决方案是将您的#cart_template
移出#cartlist
.
我还建议您不要将el
传递给视图的构造函数,您的视图应该创建自己的el
并且调用者应该将该el
放在DOM中所需的位置。这样,视图就完全负责其元素,并且您将减少僵尸和事件问题。
相关文章:
- 如何使用下划线js转换这些数据
- 带嵌套json的下划线js查找
- 在Backbone.js应用程序中使用lodash而不是下划线
- 下划线扩展方法和结构.js子类
- 使用下划线.js筛选 JS 对象
- 是否可以使用下划线.js对此 JSON 数据进行分组
- 下划线.js,根据键值删除对象数组中的重复项
- 下划线.js .map 方法会中断 IE8
- _.数组中的每个查找值都返回 true 或 false.使用下划线 JS
- 为什么我的代码使用下划线.js但当我使用 Ramda.js 时却不行
- 在我的jQuery/js中包含下划线模板
- 我在angular JS中选择了一个默认选项,并删除了两个单词之间的下划线
- 下划线.js HTML 元素中的模板
- 在节点中使用下划线.js
- 对于下划线中的每个.JS
- 做下划线.js函数,如_.findWhere(),同步返回结果
- 将非字符串属性与下划线匹配.js在哪里
- 以下下划线.js代码如何工作
- 主干.js/下划线.js错误:没有方法“html”
- 编码JS下划线_.从零开始扩展