您好我正在使用knockout foreach来生成我的布局。我以适当的方式遇到设置属性问题。这是我的代码:
<div class="row" data-bind="foreach: points">
<div class="col-md-4" id="oferty" data-bind="event: { mouseenter: $parent.mouseEnter, mouseout: $parent.mouseOut}">
<h2 data-bind="text: name"></h2>
<p>NuGet is a free Visual Studio extension that makes it easy to add, remove, and update libraries and tools in Visual Studio projects.</p>
<p>
<a class="btn btn-default" href="http://go.microsoft.com/fwlink/?LinkId=301866">Learn more »</a>
</p>
</div>
</div>
我需要以某种方式填充属性数据名称和我的点 - &gt;名称数据。得到类似的东西:
<div class="col-md-4" data-name="Test1" id="oferty">
<h2>Get more libraries</h2>
<p>NuGet is a free Visual Studio extension that makes it easy to add, remove, and update libraries and tools in Visual Studio projects.</p>
<p><a class="btn btn-default" href="http://go.microsoft.com/fwlink/?LinkId=301866">Learn more »</a></p>
</div>
<div class="col-md-4" data-name="Test2" id="oferty">
<h2>Get more libraries</h2>
<p>NuGet is a free Visual Studio extension that makes it easy to add, remove, and update libraries and tools in Visual Studio projects.</p>
<p><a class="btn btn-default" href="http://go.microsoft.com/fwlink/?LinkId=301866">Learn more »</a></p>
</div>
我试过了:
addAttributes: {'data-name': name}
和
attr: {'data-name': name}
但它们都不起作用。 有人可以建议我解决问题的简单方法吗?
Update1回答nemesv 控制台中没有错误。
var poszukiwane = $(this).attr("data-name");
console.log(poszukiwane);
以上代码始终返回undefined ...
Update2:添加Jsfiddle:
但是不知道如何在那里包含多个js框架,所以会在一行中抛出错误
答案 0 :(得分:3)
Knockout没有将this
设置为event
绑定处理程序中的当前元素。
所以你需要使用event
作为self.mouseEnter = function (viewModel, event) {
var poszukiwane = $(event.currentTarget).data("name");
console.log(poszukiwane);
console.log("mouseEnter");
};
对象并从那里获取数据:
data-
演示second argument of the handler function。
但是你正在使用Knockout,所以这是一个反模式,使用self.mouseEnter = function (viewModel, event) {
var poszukiwane = viewModel.name; //viewModel is the currently hovered point
console.log(poszukiwane);
console.log("mouseEnter");
};
属性传递你的数据,因为你无论如何都拥有你的视图模型中的所有数据,所以你可以写:
{{1}}
演示JSFiddle。