更改“with”属性更改样式

时间:2012-04-13 15:22:36

标签: javascript jquery css knockout.js

我的html看起来像这样:

<div>
    <table>
        <tr onclick="show();">
            <td class="cell">Click to open</td>
        </tr>
    </table>
</div>
<div style="display:none; position:absolute; left:150px" id="hiddenDiv">
    <table data-bind="with: someProperty">
        <tr onclick="hide();">
            <td class="cell" data-bind="text:message"></td>
        </tr>
    </table>
</div>
<input type="button" value="Color cells" onclick="colorCells()" />

我的JavaScript看起来像这样:

    function show() {
        vm.someProperty(vm.list[1]);
        $("#hiddenDiv").fadeIn("slow");
    }
    function hide() {
        $("#hiddenDiv").fadeOut("slow");
    }
    function colorCells() {
        $(".cell").css("background-color", "Yellow");
    }

    function ViewModel() {
        this.list = [new SubModel("item 1"), new SubModel("item 2")];
        this.someProperty = ko.observable(this.list[0]);
    }

    function SubModel(msg) {
        this.message = msg;
    }

    var vm = new ViewModel();

    $(function () {    
        ko.applyBindings(vm);
    });

我设置了一个jsFiddle here

现在的问题是,当您单击该按钮时,所有具有“cell”类的表格单元格应该更改其背景颜色。但是,如果隐藏的div不可见,那么当它可见时,它的背景颜色仍然是白色。原因似乎是因为我正在更改包含隐藏单元格的“with”绑定中使用的属性。当你用“with”改变绑定属性时,它会重置它的子项的样式。

(如果没有意义,请在jsFiddle上执行此操作。单击按钮,然后单击“单击以打开”单元格。请注意,“项目2”未突出显示。再次单击该按钮,它将是现在再次单击“单击打开”单元格,注意“项目2”不再突出显示。现在删除在show函数中设置“someProperty”的行并重复实验。“item 1”现在正确突出显示无论单击颜色单元格按钮时是否可见

这是设计的吗?有没有办法解决它,以便更改“with”使用的属性不会重置样式?

2 个答案:

答案 0 :(得分:3)

解决这个问题的正确方法,恕我直言,将颜色也作为一个可观察的颜色,可以通过点击按钮进行更改。我有更新jsfiddle here

答案 1 :(得分:0)

不是改变css类,而是尝试改变单元格的类而不是css类'cell'本身,看看是否有效?