使用knockoutjs时,Flot画布不会在UI中呈现

时间:2014-04-02 15:59:52

标签: knockout.js flot

我在使用flot grap和knockout js时遇到了问题

Flot Graph在淘汰赛绑定div外侧工作 如果它位于淘汰赛绑定div之外,那么图形的(div占位符)就可以很好地绘制。 以下是jsfiddle - http://jsfiddle.net/keyur12/g9aLe/

在knocout绑定div内部时,Flot Graph无法正常工作 只要我们在knockout绑定div中添加div占位符,那么flot grap的画布就不起作用了。 以下是jsfiddle - http://jsfiddle.net/keyur12/fGBBR/

<div style="float:left">
    Test 1
<h2>People</h2>
<ul data-bind="foreach: people">
    <!-- flot grap div inside knoutout binding -->
    <div id="placeholder" style="width:400px;height:300px;float:right"></div>

    <li> hi1 </li>
</ul>
<div>

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

对于数组中的每个元素,foreach块中的所有标记都是重复的。因此,在上面的标记中,您将有一个

<div id="placeholder" style="width:400px;height:300px;float:right"></div>

for people数组中的每个人员。这将导致重复的“占位符”元素。

此外,您正尝试使用

在文档就绪功能中绘制图形
 $.plot($("#placeholder"), data, options);

哪个不起作用,因为该元素甚至还不存在。你能解释一下你想做什么吗?你想为每个人画一张图吗?如果是这样,您应该创建自定义绑定(请参阅:custom binding doc

答案 1 :(得分:0)

经过一番努力和重新思考后,终于找到了自己的解决方案。

基本上要使flot图在knockout绑定中工作,必须确定如何为可观察值分配值。

  1. 如果使用getJSON调用 如果observables是getJSON调用中的assgined值,那么$.plot($("#placeholder0"), data, options);应该在getJSON调用内部,并且具有占位符的唯一索引。不在$(document).ready(function(){}); 示例:

    $的getJSON(&#34; someURL&#34;,功能(数据){     self.someObservableArray(data.someArrayObjects);     $ .plot($(&#34;#placeholder0&#34;),data,options);   });

  2. 如果未使用getJSON调用,则应调用$.plot($("#placeholder0"), data1, options);

    (文档)$。就绪(函数(){});在ko.applybindings();

  3. 之后

    示例:

     $(document).ready(function(){
        ko.applybindings(new appModel());
        $.plot($("#placeholder0"), data, options);
        });
    

    以下是工作示例的更新小提琴 - http://jsfiddle.net/keyur12/fGBBR/3/