我应该如何将 javascript 函数调用到 kohana 视图中?

Posted

技术标签:

【中文标题】我应该如何将 javascript 函数调用到 kohana 视图中?【英文标题】:how should i call a javascript function into a kohana view? 【发布时间】:2011-02-09 08:24:17 【问题描述】:

我有一个简单的 kohana 视图和一个倒计时 30 分钟的 javascript。 我已经将 javascript 文件放入目录 /media m 中,它的名称是 countdown.js .我的问题是:我怎么能调用那个javascript?形成视图?还是从控制器中显示在视图中?以及我如何在控制器或视图中准确处理 js 函数或函数?

谢谢

倒计时js:

var javascript_countdown = function () var time_left = 10; //倒计时的秒数 var output_element_id = 'javascript_countdown_time'; var keep_counting = 1; var no_time_left_message = 'JavaScript 倒计时没有时间了!';

function countdown() 
    if(time_left < 2) 
        keep_counting = 0;
    

    time_left = time_left - 1;


function add_leading_zero(n) 
    if(n.toString().length < 2) 
        return '0' + n;
     else 
        return n;
    


function format_output() 
    var hours, minutes, seconds;
    seconds = time_left % 60;
    minutes = Math.floor(time_left / 60) % 60;
    hours = Math.floor(time_left / 3600);

    seconds = add_leading_zero( seconds );
    minutes = add_leading_zero( minutes );
    hours = add_leading_zero( hours );

    return hours + ':' + minutes + ':' + seconds;


function show_time_left() 
    document.getElementById(output_element_id).innerhtml = format_output();//time_left;


function no_time_left() 
    document.getElementById(output_element_id).innerHTML = no_time_left_message;


return 
    count: function () 
        countdown();
        show_time_left();
    ,
    timer: function () 
        javascript_countdown.count();

        if(keep_counting) 
            setTimeout("javascript_countdown.timer();", 1000);
         else 
            no_time_left();
        
    ,
    init: function (t, element_id) 
        time_left = t;
        output_element_id = element_id;
        javascript_countdown.timer();
    
;

();

//以秒为单位的倒计时时间,以及元素ID javascript_countdown.init(3673, 'javascript_countdown_time');

【问题讨论】:

【参考方案1】:

您可以使用kohana html helpers。在您的控制器功能或视图文件中,您可以这样:

echo html::script('media/countdown.js');

echo 语句放在ID 为“javascript_countdown_time”的html 元素之后。如果可能,在关闭 &lt;/body&gt; 之前。

...
<div id="javascript_countdown_time"></div>
...
<script src="/media/countdown.js"></script>
</body>

【讨论】:

我真的无法通过阅读您给我的链接中的内容来弄清楚 html 助手的外观。如何将 js 脚本嵌入到 html 助手中? javascript 在 countdown.js 中。如果您希望您的 javascript 是内联的,那么您可以直接回显它,例如 echo "&lt;script&gt;window.onload = countdown()&lt;/script&gt;"。我在这里假设您在 countdown.js 中定义了一个 countdown() 函数 所以,如果我把 echo html::script('mediafiles/countdown.js');在控制器中,并在视图中回显“”,计数器根本不显示 @dana 这是假设您在 countdown.js 中有一个倒计时功能。在 countdown.js 中发布一些实际代码会有所帮助 好的,它现在发布在问题中。我的问题是:我应该在控制器中回显 html::script('mediafiles.countdown.js') 吗?当我在视图中编写 时,解释器会这样知道我在说什么吗?谢谢!【参考方案2】:

你可以按照@erickb 所说的去做,或者你可以在你的 查看 (php)

&lt;script src="media/countdown.js"&gt;&lt;/script&gt;

确保当页面显示在浏览器中时加载 countdown.js [使用 firebug 或 chrome 中的开发人员面板来验证它是否已加载。 ]

无论你想从哪里调用函数,只要调用它就行了。让我们知道它是怎么回事。

【讨论】:

所以,我在视图中有这个:echo html::script('countdown.js'); 您是否从浏览器中检查了 countdown.js 是否正在加载? 是的,如果我查看源代码,我会看到: 能不能点击你提到的view source中的countdown.js?它是否显示有效的 countdown.js ? 不,我实际上无法点击它。我真的不明白为什么它没有加载到视图中。为了简单起见,我将countdown.js放在了view文件夹中,所以路径很简单:echo html::script('countdown.js');

以上是关于我应该如何将 javascript 函数调用到 kohana 视图中?的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义按钮添加到调用 JavaScript 函数的工具栏?

如何从客户端javascript调用节点函数? (HTML)

sencha / javascript - 如何从 tpl 模板中调用函数

如何调用参数来自 Ruby 模型的 javascript 函数?

如何将值从javascript传递到iOS UIWebView

如何限制javascript中函数的执行时间?