【问题标题】:How to save changes back to databse from jsTree?如何将更改从 jsTree 保存回数据库?
【发布时间】:2017-08-21 09:58:55
【问题描述】:

我想将我在 jsTree 上所做的更改保存回数据库。我尝试了不同的方法,但无法开始工作。我在codeigniter工作。如果可以,请你帮助我。谢谢你。 这是我的代码, view.php:

 <button id="target" type="submit">Click here</button>

<script type="text/javascript">
    $(document).ready(function () {
        $('#tree-container').on('changed.jstree', function (e, data) {
            var i, j, r = [];
            // var state = false; 
            for (i = 0, j = data.selected.length; i < j; i++) {
                r.push(data.instance.get_node(data.selected[i]).id);
            }
            $('#txttuser').val(r.join(','));
        }).jstree({
            'plugins': ["checkbox", "dnd", "search", "contextmenu"],
            'core': {
                "check_callback" : true,
                "multiple": true,
                'data': {
                    "url": "getChildren",
                    "dataType": "json"
                }
            },
            'checkbox': {
                three_state: false,
                cascade: 'up'
            },
            'plugins': ["dnd","contextmenu","search","wholerow"],
        }
        );
    });

   $( "#target" ).click(function() { 
       var v =$('#tree-container').jstree(true).get_json();      
       var mytext = JSON.stringify(v);      
       alert(mytext); });
</script>

<div class="row"> 
    <div class="container"> 
        <input type="hidden" name="node" id="node" value="" /> 
        <div class="form-group"> <div id="tree-container"></div> 
        </div> 
    </div> 
</div>

controller.php:

 function getChildren() { 

    $this->load->model('Category_model');

    $result = $this->Category_model->tree_all(); 

    $itemsByReference = array(); 
 // Build array of item references: 
        foreach($result as $key => &$item) { 
        $itemsByReference[$item['category_id']] = &$item; 
 // Children array:
        $itemsByReference[$item['category_id']]['children'] = array(); 
 // Empty data class (so that json_encode adds "data: {}" ) 
        $itemsByReference[$item['category_id']]['data'] = new StdClass(); 

    } 
 // Set items as children of the relevant parent item. 
    foreach($result as $key => &$item) 
        if($item['parent_id'] &&       isset($itemsByReference[$item['parent_id']])) 
            $itemsByReference [$item['parent_id']]['children'][] = &$item; 


 // Remove items that were added to parents elsewhere: 
    foreach($result as $key => &$item) { 
        if($item['parent_id'] &&    isset($itemsByReference[$item['parent_id']])) 
            unset($result[$key]); 



    } 

    foreach ($result as $row) { 
        $data[] = $row; 

    } 
 // Encode: 
echo json_encode($data); 

    }

model.php:

 function tree_all() { 
$result = $this->db->query("SELECT category_id, category,category as text,   parent_id FROM category ")->result_array(); 
foreach ($result as $row) { 
    $data[] = $row; 

} 
    return $data; 

}

请帮帮我!!!我试图弄清楚这几天。

【问题讨论】:

  • 我想将我在 jsTree 上所做的更改保存回数据库 你的意思是你在 jstree 复选框上所做的选择/取消选择?
  • 没有。创建、删除、重命名、编辑和拖放。
  • 没有得到你!
  • 在jsTree中可以创建重命名修改删除节点。当我删除一个节点时,它不会从数据库(服务器)中删除,当我刷新页面时,“已删除”节点仍然存在。
  • 好的,您必须处理所有这些事件并使用ajax() 为每个操作更新数据库中的数据

标签: php json codeigniter jstree


【解决方案1】:

要使用 JSTree 管理添加、编辑、更新,首先下载 jstree.js 并检查以下行:

"create" : {

这是当您单击创建时执行的代码块,将您的创建代码逻辑与对add / update 数据库的ajax 调用一起放在这里。

您可以通过同样的方式管理editdelete

注意:editdelete 就在create 之后

Ajax 语法:

$.ajax({
  url : '<?php echo base_url().'/controllerfunction' ?>',
  method : 'post',
  data: {
    key : value
  },
  success: function(response)  // response from controller function
  {
     // your code here
  }
});

【讨论】:

  • 是的。我了解这一点,但我不知道如何编写 ajax 调用。 :( 我找到了函数的。
猜你喜欢
  • 1970-01-01
  • 2012-06-25
  • 2015-08-24
  • 1970-01-01
  • 2010-11-12
  • 2016-09-29
  • 2014-07-08
  • 2012-07-23
  • 1970-01-01
相关资源
最近更新 更多