【问题标题】:how should i call a javascript function into a kohana view?我应该如何将 javascript 函数调用到 kohana 视图中?
【发布时间】: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');

【问题讨论】:

    标签: javascript view controller kohana call


    【解决方案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');
    猜你喜欢
    • 1970-01-01
    • 2011-09-12
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多