0

这是 PHP 上的 CodeIgniter。

在我的(MVC)视图中,我有一个循环,它为循环的每个实例创建一个小的浮点图(javascript)。

<?php
for each ($catalog as $book) {
    echo "<li>";
    echo anchor('controller/manager/'.$key['Title']) . ' is available';

      // flot javascript goes here to generate a small graph for this list item

}
unset ($book);      ?>

循环本身是 PHP,javascript 可能是大约 50 行左右的代码,这是我在其他地方从一些示例中开发的。

因此,为了让该代码在此视图中工作,我需要回显每一行,否则当我在 javascript 启动之前终止 PHP 并在 javascript 完成后重新标记 php 时,我会中断for each循环。

什么是更有效的方法?

4

4 回答 4

1

大块的文本/代码使用 heredocs 更容易回显。如果您需要在 JavaScript 中使用 PHP 变量,PHP 仍会解析该块。

http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

$some_javascript = <<<_JS
some mulit-
line text
<<<_JS
于 2013-10-21T22:08:21.773 回答
1

最好使用不显眼的 JavaScript,而不是将内联 JavaScript 耦合到后端代码。

于 2013-10-21T21:56:43.733 回答
0

您可以使用 hmtl5 数据属性来传递图表的指标。您也可以使用库将数据绑定到这些元素,诸如 knockout.js 或 angular.js 之类的库然后在 javascript 客户端上工作,就像 Neil 所说的那样。

风景:

<ul id="book-graph">
   <?php foreach($books as $book): ?>
        <li id="book_id_<?php echo $book->id;?>">
           <span id="graph" data-bind="metric : <?php echo $book->metric;?>">&nbsp;</span>
        </li>
   <?php endforeach; ?>
</ul>

//jQuery 示例

(function($){

   var GraphAPI = {
        init : function(){
            if($("#book-graph"))
                this.drawBookGraph();
        },
        drawBookGraph : function(){
            //Your graph code
        }
   };

   $(function(){
        //Load up your graph API when your ready
        GraphAPI.init();
   });

}(jQuery));
于 2013-10-22T00:31:01.297 回答
0

您可以使用短标签将数据从控制器馈送到视图的 javascript 部分。

例如,我们在视图中使用以下 javascript 代码:

    var assign_data = [
    {label : "Single", data:<?= $single_num ?>},
    {label : "Barcode", data:<?= $barcode_num ?>},
    {label : "Template", data:<?= $template_num ?>}

];

对于这个图,我们从模型中获取相应的数字,然后为其分配相应的短标签以由 flot 渲染。因此,对于 $barcode_num,我们使用以下代码:

    $data['barcode_num'] = $this->history_model->get_barcode_assign_num($this->org_id);

我们还在控制器中构建格式化字符串以提供浮点数据。一个控制器方法的示例输出为条形图提供了此示例字符串。:

          data: [ [144,4],[157,0],[138,0],[145,0],[149,0],[141,0],[137,3],[155,0],[150,0],[142,0],[148,0],[140,0],[146,0],[152,0],[153,0],[147,1],[143,0],[156,0],[139,1],[154,0],[151,0] ]
于 2013-10-21T22:09:56.950 回答