Для проблемы цикла в JQuery - PullRequest
       21

Для проблемы цикла в JQuery

0 голосов
/ 25 августа 2009

Я использую JQuery, где я пытаюсь использовать возвращаемые значения контроллера Cakephp во входном элементе JQuery.

У меня есть две переменные, возвращенные из моего действия контроллера CakePHP $ записи и $ атрибуты .. $ attribute вернет имя поля и его тип, размер $ records возвращает имя поля и значение, представленное для поля.

Оба являются переменными массива Здесь я создал соответствующий элемент ввода, используя

             <?php foreach ($attributes as $r): ?>
               $("<div id= <?php echo $r['Attribute']['label'];?> ></div>").appendTo("#main");
               $("<input id=input<?php echo $r['Attribute']['id'];?> type= 'text' style= 'width:<?php echo $r['Attribute']['size'];?>px'value='<?php echo $attribute['Result']['value'];?>' ?> ></input><br>").appendTo("#main");
            $("<div id= <?php echo $r['Attribute']['type'];?> ></div>").appendTo("#main");
               <?php endforeach; ?> 

В приведенном выше коде, где я создаю элемент ввода, он показывает мне правильный элемент ввода на его основе. Но внутри этого элемента ввода, когда я пытался использовать как значение = ''?>

я должен держать

               <?php endforeach;?>

где только внутри я могу использовать

Как это сделать .. Пожалуйста, предложите мне .. Так как оба для циклов, я не знаю, как их использовать, так как, когда я продолжаю оно будет создаваться столько раз, сколько нужно.

   <script type="text/javascript">
      $(document).ready(function(){
           $(".edi").click(function (){


               <?php foreach ($attributes as $r): ?>
               $("<div id= <?php echo $r['Attribute']['label'];?> ></div>").appendTo("#main");
               $("<input id=input<?php echo $r['Attribute']['id'];?> type= 'text' style= 'width:<?php echo $r['Attribute']['size'];?>px'value='<?php echo $attribute['Result']['value'];?>' ?> ></input><br>").appendTo("#main");
            $("<div id= <?php echo $r['Attribute']['type'];?> ></div>").appendTo("#main");
               <?php endforeach; ?> 
               $(".edi").hide();$(".vie").show();
               return false;
           });
      });
      </script>

EDIT: Я сохранил для извлечения полей (тип, размер, имя поля) из таблицы атрибутов. предназначен для извлечения записей полей That (метка, значение) ...

При нажатии на кнопку «Редактировать» я создаю элементы ввода с размерами, в которых я получил их из $ r ['Attribute'] ['size'] как

$ ("type = 'text' style = 'width: px'value =' '?>>
"). AppendTo ("# main"); Это показывает мне правильную генерацию элементов ввода с правильными размерами того, что он извлекает из таблицы.

Теперь внутри этого, т. Е. В элементах Input, я хочу показать значение этого соответствующего поля того, что я получаю, используя $ r1 ['Result'] ['value']; Это где я не могу сделать эти значения для отображения внутри элементов ввода .. Пожалуйста, помогите мне ......

Ответы [ 2 ]

1 голос
/ 25 августа 2009

Не уверен, понимаю ли я ваш вопрос, но вот мой ответ:

<script type="text/javascript">
  $(document).ready(function() {
    $(".edi").click(function() {
      <?php
        // loop over attributes
        foreach ($attributes['Attribute'] as $attribute):
          // loop over results
          foreach ($entries['Result'] as $result):
            // determine attribute value
            if ($result['fieldname'] == $attribute['fieldname']):
              $attribute['value'] = $result['value'];
            endif;
          endforeach;
          // build html string
          $html = String::insert(
            '<div id=":label"></div><input id="input:id" type="text" style="width: :size px" value=":value"></input><br><div id=":type"></div>',
            $attribute // see previous version for expanded version of this line
          );
          // append it using jquery
          echo "$('" . $html . "').appendTo('#main');";
        endforeach;
      ?>
      $(".edi").hide();
      $(".vie").show();
      return false;
    });
  });
</script>
0 голосов
/ 25 августа 2009

Вопрос не очень понятен, но вот предложение

Почему бы не создать новый файл представления для рендеринга HTML, который вы хотите добавить к #main?
Вы можете передать массив атрибутов из действия контроллера в файл представления
Например, представление может быть «ViewToAppend.ctp»:

<?php foreach ($attributes as $r): ?>
    <div id="<?php echo $r['Attribute']['label'];?>" /></div>
    <input id="input<?php echo $r['Attribute']['id'];?>" type="text" style= "width:<?php echo $r['Attribute']['size'];?>px" value="<?php echo $attribute['Result']['value'];?>"> </input><br>
    <div id="<?php echo $r['Attribute']['type'];?>"></div>
<?php endforeach; ?>

скажем, ваш контроллер - "YourController", а вызванное вами действие называется "YourAction".
После начального кода, в котором вы заполняете массив $ attribute и устанавливаете его как переменную представления, проверьте, является ли запрос ajax.
Если это ajax-запрос, то визуализируйте только ваше уменьшенное представление "ViewToAppend.ctp"

class YourController extends AppController{
    var $components = array( ... , 'RequestHandler', ... );
    ...
    function YourAction( /* parameters */ ){

        /* initial code where you set up $attributes */

        $this->set('attributes',$attributes);

        if($this->params['isAjax'])
            render('/path/to/view/ViewToAppend','ajax');
    }
    ...
}

тогда вы можете позвонить "YourAction" из JavaScript

<script type="text/javascript">
$(document).ready(function(){
    $(".edi").click(function (){

        $.ajax({
            url:'YourController/YourAction/...',
            success:function(msg){
                $('#main').append(msg);
                $(".edi").hide();
                $(".vie").show();
            }
        });

        return false;
    });
});
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...