【问题标题】:A simple way to implement multiple use jquery functions实现多用jquery函数的简单方法
【发布时间】:2014-07-02 07:41:50
【问题描述】:

这是一个相当复杂的问题,但我会尽力解释它。

我正在开发一个使用很多 jQuery 插件(plupload、jCrop 等)的 wordpress 网站。

在某些页面上有多个 plupload 实例,其中一些实例要求用户能够裁剪图像。

为了节省我多次编写相同的代码,我只使用相同的 jQuery,但变量附加了一个 php 变量。

我创建了一个类,将所需的 jQuery“写入”到 dom 中,然后它可以传入一个变量,用于附加 jQuery 变量以使其唯一。

然后,当我需要该功能时,我会在网页的不同部分实例化该类的多个对象。

例如(为清楚起见,简化示例)...

在网页上..

<div>
<?php
  $thisUploader = new reqJqueryClass("firstUploader");
  $thisUploader->implementMainUploadPicture;
?>
</div>

<div>
<?php
  $anotherUploader = new reqJqueryClass("secondUploader"); 
  $anotherUploader->implementSecondaryUploadPicture; // This also has crop functionality
?>
</div>

然后 Class 将传递给它的参数(在本例中为 firstUploader / secondUploader)并将其写入 $this->dynamicPartOfVar。

在我的课堂内......

public function implementMainUploadPicture() {
  $this->start_Javascript();
  $this->set_Up_Object_Specfic_Vars();
  $this->run_Plupload_jQuery();
  $this->end_Javascript();
}

public function implementSecondaryUploadPicture() {
  $this->start_Javascript();
  $this->set_Up_Object_Specfic_Vars();
  $this->run_Jcrop_jQuery();
  $this->run_Plupload_jQuery();
  $this->end_Javascript();
}

etc .. etc..(这实际上是包含更多功能,而不仅仅是上传和裁剪库)

然后我的方法看起来像这样......

protected function start_Javascript() {
?>
  <script type="text/javascript">
  jQuery(document).ready(function($) {
<?php
}

protected function end_Javascript() {
?>
  });
  </script>
<?php
}

protected function set_Up_Object_Specfic_Vars() {
?>
  var dynamicPartOfVar = "<?php echo $this->dynamicPartOfVar; ?>"; 
// $this->dynamicPartOfVar is firstUploader or secondUploader (or whatever was passed in)
  var imageManipulationObject = ();
<?php
}

public function run_Jcrop_jQuery() {
?>
  imageManipulationObject["myVariable"+dynamicPartOfVar];

  // rest of vars set up the same way
  // so that I can have multiple instances of this jquery
  // on the same page without conflict ....
<?
}

public function run_Plupload_jQuery() {
?>
  imageManipulationObject["anotherVar"+dynamicPartOfVar];

  // rest of vars set up the same way
  // so that I can have multiple instances of this jquery
  // on the same page without conflict ....
<?
}

尽管这有点代码味道,但它似乎是一种享受。我唯一关心的是这个系统是否具有可扩展性(我需要在一个页面上有很多上传/jcrop 等对象),或者这样做是否会让浏览器陷入困境?

我认为一旦站点经过测试并正常运行,我会从浏览器中复制所有 jQuery,将其粘贴到它自己的文件中,将其缩小,然后像往常一样通过页眉(或页脚)调用它?

但是,我想知道是否有一种“正确”的方式来实现我在这里尝试做的同样的事情?

我所做的一切都是自学的,因此很少实施“最佳实践”,而且我不知道还有其他方法可以实现我在这里尝试做的事情吗?

感谢您能给我的任何帮助。 :-)

【问题讨论】:

    标签: javascript php jquery wordpress


    【解决方案1】:

    代码真的很难维护。

    首先,如果你使用多个 jQuery 版本,那么你应该使用jQuery.noConflict()http://api.jquery.com/jquery.noconflict/

    其次,我没看懂下面的代码:

    protected function start_Javascript() {
    ?>
       <script type="text/javascript">
          jQuery(document).ready(function($) {
    <?php
    }
    

    为什么不将代码加载到“header.php”或“index.php”或任何其他视图文件中?! 这个函数不起作用,因为它没有return 任何东西或echo 任何东西。

    第三,如果你真的想将 Javascript 和 PHP 混合在一起,那么你应该做到以下几点:

    <script type="text/javascript">
        var js_arr = new Array();
        jQuery(document).ready(function(){
            <?php
            $arr = array('test1', 'test2');
            for($i=0; $i<sizeof($arr); $i++){
            ?>
            js_arr.push('<?php echo $arr[$i]; ?>');
            <?php } ?>
        });
    </script>
    

    它将填充JS数组中的PHP数组。

    【讨论】:

    • 感谢您的回答。我不知道为什么我的问题被否决了?我没有使用不同版本的 jquery - 你可能误读了。但是,为了回答您的观点,start_Javascript 将 javascript 写入 DOM,以便在您“查看源代码”时出现。一切正常。只是我觉得有一种更好的方法可以做到这一点。我无法在标题中加载代码,因为我不想一遍又一遍地编写相同的 jquery 代码。这样我就有了几个 jquery jigsaw 片段,我只是调用我需要的片段来获得我需要的功能。
    • jQuery 插件应该不会造成任何问题。您可以通过这种方式启动 2 个 jQuery 对象:$(".jcrop_image_1").jCrop(); 和 $(".jcrop_image_2").jCrop();. The code you wrote doesn't make sense and it's really hard to maintain. On another hand, the PHP functions you wrote don't return` 或 echo 任何类型的值。他们没用。像你这样混合JS和PHP真的很糟糕。
    • 是的,我知道您可以通过这种方式启动 2 个插件,但如果您想让插件有时而不是其他插件一起工作(共享变量),问题就来了。还有,如果你想在函数等范围内使用不同的变量。它解释起来真的很复杂,也许它对于这种媒体来说太复杂了...... :-( 无论如何感谢你的帮助。
    • 您可以避免使用一堆变量并将数据存储在 HTML5 data 属性中。以这种方式混合 JS 和 PHP 并不能解决您的问题,而且会使调试和维护变得更加困难。
    猜你喜欢
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    相关资源
    最近更新 更多