Knockout foreach - set attr

时间:2013-12-30 09:46:39

标签: javascript knockout.js

您好我正在使用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 &raquo;</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 &raquo;</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 &raquo;</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:

http://jsfiddle.net/nnsBQ/3/

但是不知道如何在那里包含多个js框架,所以会在一行中抛出错误

1 个答案:

答案 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