2013-08-07 3 views
2

Я пытаюсь обрабатывать значение aoColumns с другой php-страницы. Но тогда это не подходит должным образом, тогда как если я использую статическую ценность, то ее работа. Мой код, как: в PHP страницеaoColumns datatables не работают должным образом

$aoColumn = array("null","null","null","{bSortable: false}"); 
<input type="hidden" name="aoColumn" id="aoColumn" value="' . implode(",",$aoColumn) . '"> 

в Js странице

var aos = $('#aoColumn').val(); 
var ao = (aos)?aos.split(","):[]; 
$.each(ao,function(i){ 
}); 

и в DataTable декларации: "aoColumns": ао

Но это не работает. Пожалуйста, дайте мне знать вопрос. Спасибо заранее.

UPDATE

Я должен знать, что в моем случае aoColumns отпечатки ["null", "null", "null", "{bSortable: false}"] тогда как он должен быть [null,null,null,Object{bSortable=false}]. Как это сделать?

ответ

0

Это было весело :-) Взятые ваши настройки 1: 1 (всего 3 колонки, хотя):

<? 
$aoColumn = array("null", "{bSortable: false}", "null"); 
echo '<input type="hidden" name="aoColumn" id="aoColumn" value="' . implode(",",$aoColumn) . '">'; 
?> 

JS

var ao = []; 
var aos = $('#aoColumn').val().split(','); 
for (var i=0;i<aos.length;i++) { 
    if (aos[i]=='null') { 
     //no need for processing 
     ao.push('{ null }'); 
    } else { 
     //remove {, } and whitespace, return array splitted by : 
     var s = aos[i].replace('{','').replace('}','').replace(' ','').split(':'); 
     //create object 
     var o = {}; 
     //here you need to force a real boolean instead of "false" 
     o[s[0].toString()]=(s[1]=="false") ? false : true; 
     ao.push(o); 
    } 
} 

$('#table').dataTable({ 
    "aoColumns": ao 
}); 

Виола. Datatables анализирует ao правильно, второй столбец не сортируется.

+1

Большое спасибо davidkonrad. На самом деле я хочу настроить динамическое значение для aoColumns. Теперь он работает нормально, как я и ожидал. Еще раз спасибо. – Mausumi

0
JSON.parse('[null, null, null, {"bSortable": false}]'); 

Измените функцию взрываются так, что ваш value="[null, null, null, {\"bSortable\": false}]" , а затем запустить JSON.parse() на .val(), чтобы получить объект настройки.

1

То, как вы проходите $aoColumn, неверно. Вы должны передать его как JSON вместо этого - и если JSON пересылаются внутри HTML, он должен быть правильно HTML-закодирован, а также:

$aoColumn = array(null, null, null, array('bSortable' => false)); 
echo '<input ... value="' . htmlspecialchars(json_encode($aoColumn)).'">'; 

И превратить его обратно в объект с $.parseJSON:

var aoColumn = $.parseJSON($('#aoColumn').val()); 

Однако, я не уверен, почему вы хотите беспокоиться о скрытом поле вообще. Вы можете передать конфигурацию JavaScript непосредственно:

<?php $aoColumn = array(null, null, null, array('bSortable' => false)); ?> 

<!-- later on.... --> 
<script> 
    var aoColumn = <?php echo json_encode($aoColumn); ?>; 
</script> 
+0

Хороший ответ, но разве это не совсем другой подход? Что, если Mausumi не сможет/не сможет изменить PHP-скрипт? – davidkonrad

+0

@ davidkonrad: Тогда они должны сказать, что существуют определенные ограничения. Хотя я сомневаюсь, что это так, поскольку в вопросе говорится, что «мой код похож ...». – Jon

+0

вправо, но, как вы можете видеть - несколько раз все, что мы хотим, это всего лишь ответ, а не лекция – davidkonrad

Смежные вопросы