Knockout JS模板attr href绑定返回函数而不是值
Knockout JS template attr href binding returning function instead of value
我有一个模板绑定,看起来像这样:
<div style="display: none;" data-bind="template: { name: 'info-window-template', data: currentPlace() }"></div>
<script type="text/html" id="info-window-template">
<div class="infobox">
<h2 id="placeName">
<a data-bind="data: name(), attr: { href: website() }"></a>
</h2>
<h4 data-bind="data: address()"></h4>
</div>
</script>
和
var places = [
{
name: "Austin Pizza Garden",
address: "6266 Hwy 290 Austin, TX 78735",
website: 'http://www.austin-pizza-garden.com',
}...]
And a Model:
var Place = function(data) {
this.name = ko.observable(data.name);
this.address = ko.observable(data.address);
this.website = ko.observable(data.website);
}
和ViewModel:
var ViewModel = function() {
var self = this;
self.placeList = ko.observableArray([]);
places.forEach(function(placeItem) {
self.placeList.push( new Place(placeItem) );
});
self.currentPlace = ko.observable( this.placeList()[0] );
对于name
和address
,输出都可以找到,但对于website
,它返回函数而不是url,因此链接不起作用。
当我在浏览器中运行这个时,我得到了这个:
<a href="function d(){if(0<arguments.length)return d.Wa(c,arguments[0])&&(d.X(),c=arguments[0],d.W()),this;a.k.Ob(d);return c}">Austin Pizza Garden</a>
为什么knockout返回函数而不是url的文本?为什么它对name
和address
有效,但对website
无效?我怎样才能使它返回url的文本?
如果你打开项目链接,你会看到第一个信息框div从html实际上工作完美,但这就是为什么它在js中被动态调用,它打破。
完整代码在这里:
你的代码工作了。
var Place = function (data) {
this.name = ko.observable(data.name);
this.address = ko.observable(data.address);
this.website = ko.observable(data.website);
};
var ViewModel = function (places) {
var self = this;
self.placeList = ko.observableArray([]);
places.forEach(function (placeItem) {
self.placeList.push(new Place(placeItem));
});
self.currentPlace = ko.observable(this.placeList()[0]);
};
var places = [{
name: "Austin Pizza Garden",
address: "6266 Hwy 290 Austin, TX 78735",
website: 'http://www.austin-pizza-garden.com'
}];
var vm = new ViewModel(places);
ko.applyBindings(vm);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<div data-bind="template: { name: 'info-window-template', data: currentPlace }"></div>
<script type="text/html" id="info-window-template">
<div class="infobox">
<h2 id="placeName">
<a data-bind="text: name, attr: { href: website }"></a>
</h2>
<h4 data-bind="text: address"></h4>
</div>
</script>
但是,您可能希望使用text
绑定。没有data
绑定。(提示:如果你的在你的real代码中使用了text
绑定,那么下次发布你的real代码,而不是你自己编的。)
也不需要使用圆括号。Knockout在数据绑定期间自动为您展开所有可观察对象。
然而,如果你看到function d(){...
作为任何数据绑定属性的值,那么你看到的是一个错误地包装在一个可观察对象中的可观察对象。在这种情况下,您应该检查视图模型构建过程,以确保任何this.x = ko.observable(y)
中没有y
本身已经是可观察的。
尝试删除括号
<script type="text/html" id="info-window-template">
<div class="infobox">
<h2 id="placeName">
<a data-bind="data: name, attr: { href: website }"></a>
</h2>
<h4 data-bind="data: address"></h4>
</div>
</script>
相关文章:
- ES6构造函数返回基类的实例
- 从函数返回角度承诺
- 如何从jquery函数返回变量
- 根据是否解析了 Promise 从函数返回值
- Javascript函数返回未定义
- 如果函数返回True,则显示Javascript按钮
- Google Sheet自定义函数返回0
- 从Ajax函数返回值
- 使用for循环从Javascript中的函数返回多个值
- 谷歌地图:函数返回未定义的值在console.log中运行良好
- 从函数中的函数返回数组时出错
- 如何从嵌套的API函数返回值
- 从Mongoose结果匿名函数返回父函数
- 函数返回错误'令牌{'
- Jquery函数返回订单问题
- Mocha/Chai测试链接到函数返回断言错误
- 从异步函数返回值
- 函数返回后更新变量
- 我如何才能继续'如果'语句来比较作为参数的多个函数返回值
- 将外部函数返回的id传递给内部函数