json jquery grid (используя django) - возникают проблемы с представлением данных - PullRequest
0 голосов
/ 20 января 2010

Я пробую этот источник, где jqGrid получает некоторые данные json из django: ссылка

К сожалению, данные не представлены в jqgrid, только пустая jqgrid.

Я рендеринг jqgrid с этим вызовом:

<script type="text/javascript">
    $(function () {
        $.getJSON("{% url myapp.views_json.grid_config %}", function(data){
            $("#mygrid")
                .jqGrid(data)
                .navGrid('#pager', 
                    {add: false, edit: false, del: false, view: true},
            {}, // edit options
            {}, // add options
            {}, // del options 
            { multipleSearch:true, closeOnEscape:true }, // search options 
            { jqModal:false, closeOnEscape:true} // view options 
            );
        });
    });
</script>

{% url myapp.views_json.grid_config%} преобразуется в URL "projects / examplegrid / cfg /". Когда я вызываю этот URL в моем браузере, он возвращает данные JSON. Пожалуйста, перейдите по ссылке, чтобы увидеть его. данные конфигурации json

Это должно быть хорошо. Похоже.. В этом файле данных JSON вы видите URL: http://127.0.0.1:8000/pm/projects/examplegrid/ Этот URL-адрес также возвращает данные JSON. Это представление в формате json данных, которые я хочу представить. Смотрите этот набор данных json здесь: ссылка

Вот скриншот получившегося jqgrid. ссылка Я знаю, что, наверное, трудно помочь мне здесь. Но мне кажется, что моя проблема на стороне jqgrid, и я думаю, что есть много взломов, которые знают, кто с этим справится. Я не: -)

Редактировать: неопределенная ошибка исчезла. Эта ошибка произошла из-за отсутствия ссылки на локальный файл:

 <script type="text/javascript" src="http://localhost:8000/media/js/i18n/grid.locale-en.js"></script> 

Но следующая ошибка в том, что она показывает «Загрузка» и не заканчивается. Кто-нибудь знает, в чем может быть проблема?

Edit: Ошибка была, очевидно, что jqgrid не был правильно инициализирован. Я использовал вики-страницу, предложенную CalebD, и теперь она работает. По крайней мере, данные JSON представлены в сетке. Теперь мне интересно, что мне нужно сделать, чтобы обновить строку.

<script type="text/javascript">
    jQuery(document).ready(function(){ 
      jQuery("#grid").jqGrid({
          url:'http://127.0.0.1:8000/pm/projects/examplegrid/',
          datatype: "json",
          mtype: 'GET',
          colNames:['id', 'description'],
          colModel:[
                    {name:'id',index:'id', width:55, sortable:false, editable:false, editoptions:{readonly:true,size:10}},
                    {name:'description',index:'description', width:300, editable:true},
               ],
         jsonReader : {
              repeatitems:false
         },
          rowNum:10,
          rowList:[10,20,30],
          pager: jQuery('#gridpager'),
          sortname: 'name',
          viewrecords: true,
          sortorder: "asc",
          caption:"Wines",
          editurl:"http://127.0.0.1:8000/pm/projects/examplegrid/"
     }).navGrid('#gridpager');
    });
</script>

Ответы [ 2 ]

1 голос
/ 20 января 2010

Параметр для .jqGrid исключает объект JS, который описывает настройки сетки, а не данные JSON. Вы должны определить тип данных, столбцы и модели столбцов, среди других вариантов. В jqGrid есть несколько примеров:

http://www.trirand.com/jqgridwiki/doku.php?id=wiki:conventions

Если вы прокрутите вниз, есть пример использования JSON.

0 голосов
/ 03 марта 2010

Для обновления строки необходимо указать editurl в параметрах сетки конфигурации.
В вашем примере он указан в js, но его также можно настроить в классе JqGrid.
Вы должны использовать URL для обработки обновлений так же, как у вас есть URL, который обрабатывает нумерацию страниц, сортировку, ...
Я использую это так:

urls.py:


...
(r'^jqgrid/(?P(\w+))/$', 'grid_handler', {}, 'grid_handler'),
(r'^jqgrid/cfg/(?P(\w+))/$', 'grid_config', {}, 'grid_config'),
(r'^edit-store/$', 'edit_store'),
...

grids.py:

<code>
class StoreGrid(JqGrid):
    ...
    url = '/jqgrid/StoreGrid/'
    editurl = '/edit-store/' 
    ...

словарь конфигурации должен иметь ключ editurl, добавьте его в get_config ():

<code>
def get_config(self, as_json=True):
config = self.get_default_config()
    config.update({
        'url': self.get_url(),
        'editurl': self.get_editurl(), #!
        'caption': self.get_caption(),
        'custom_url': self.get_custom_url()
     })
     ...

views.py:


def grid_handler(request, grid_name):
    grid = class_for_name(grid_name, 'some_namespace.grids')()
    return HttpResponse(grid.get_json(request), mimetype="application/json")

def grid_config(request, grid_name):
    grid = class_for_name(grid_name, 'some_namespace.grids')()
    return HttpResponse(grid.get_config(), mimetype="application/json")

def edit_store(request):
    if request.method == 'POST' and request.POST:
        if request.POST.get('oper') and request.POST['oper'] == 'del':
            try:
                Store.objects.get(id=request.POST['id']).delete()
            except Exception, ex:
                logging.debug(ex)
        else:
            try:
                instance = Store.objects.get(id=request.POST.get('id'))
                instance.some_field = request.POST.get('some_field')
                instance.the_other_field = request.POST.get('the_other_field')
                instance.save()
            except Exception, ex:
                logging.debug(ex)
        return render_to_response('template.html')
    return HttpResponseNotFound('invalid request')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...