Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将对象从Smarty传递到jQuery_Javascript_Jquery_Smarty_Smarty2 - Fatal编程技术网

Javascript 将对象从Smarty传递到jQuery

Javascript 将对象从Smarty传递到jQuery,javascript,jquery,smarty,smarty2,Javascript,Jquery,Smarty,Smarty2,我有一个使用jQuery克隆的smarty模板;i、 e.单击按钮将调用jQuery,jQuery将向页面添加一个选择字段。但是,选择字段应该在smarty模板中动态填充 我在下面概述了我要实现的目标 addProject.php 超级用户/addProject.tpl js/cloneformcontrols.js 克隆/add-another-supervisor.tpl 唯一不起作用的部分是clone/add-other-supervisor.tpl页面不接收对象$supervisor,因

我有一个使用jQuery克隆的smarty模板;i、 e.单击按钮将调用jQuery,jQuery将向页面添加一个选择字段。但是,选择字段应该在smarty模板中动态填充

我在下面概述了我要实现的目标

addProject.php

超级用户/addProject.tpl

js/cloneformcontrols.js

克隆/add-another-supervisor.tpl

唯一不起作用的部分是clone/add-other-supervisor.tpl页面不接收对象$supervisor,因此没有任何选择选项被填充


有人知道我如何解决这个问题吗?

因为您没有将主管交给负载。您需要将其以json格式存储在addProject.tpl的某个位置的一个隐藏字段中,然后将其注入clone/add-other-supervisor.tpl中,或者将此clone/add-other-supervisor.tpl作为隐藏字段包含在addProject.tpl中,显示:无并克隆它。没有更优雅的方法吗?不应该在jQuery中直接调用文件名。这不是smarty想要的工作方式。赋值来自PHP,因此它不会在其中包含对象。您应该像ajax调用一样从jQuery中调用PHP文件,使用PHP将值分配给模板,并使用smarty display将信息发送回jQuery。在jQuery响应中,将其显示在页面上。
// Load supervisor list into an object and pass it to smarty
$smarty->assign_by_ref('supervisor', $supervisor->results());
$smarty->display('superusers/addProject.tpl'); 
<div>
<p class="add add-data add-another-supervisor2"><i class="sprite plus2"></i> <span>Add <b class="hide">another</b> supervsior</span></p>
</div>
<script src="js/cloneformcontrols.js"></script> 
$("#main").on("click", ".add-data", function() {
    var mytarget = $(this).closest('.clonable').find('.clone:last');
    var myparent = $(this).closest('.clonable');
    var filename = "../smarty/templates/default/superusers/clones/add-supervisor.tpl";
    var theCloneHtml = '<div class="clone" id="cloneID' + formNameIncrement + '">';

    var theCloneId = 'cloneID' + formNameIncrement;
    if ($(this).hasClass('add-another-supervisor2')) {filename = "../smarty/templates/default/superusers/clones/add-another-supervisor.tpl";}

    myparent.addClass('data-added');
    mytarget.after($(theCloneHtml).load(filename, function() {
        $(this).hide().fadeIn('slow');
        updateNameAttribute(theCloneId); // need to update the name atribute or validation won't work  
    }));
    formNameIncrement++;
});
<div class="standard-row add-admin-row input-row">
        <label class="ib ib217"> <span class="plain-select">
                <select class="inp" data-myname="supervisor[]" name="supervisor[]">
                        <option value="">Select one</option>
                        {section name="i" loop=$supervisor}
                            <option value="{$supervisor[i]->id}">{$supervisor[i]->name}</option>
                        {/section}
                </select>
                </span> </label>
        <p class="add remove-this-data fl"><i class="sprite delete2"></i> <span>&nbsp;</span></p>
</div>