Заполните массив флажков с новой коллекцией - PullRequest
0 голосов
/ 01 марта 2012

Я пытаюсь заполнить массив флажков JSON-массивом из URL-адреса запроса.Я прочитал документацию и вижу, что могу сделать это с моделями и коллекциями, но я не уверен, с чего начать.Если бы кто-нибудь мог показать мне, какой путь, я был бы признателен.Это мой код:

var mBox = Backbone.Model.extend({

});
var cBox = Backbone.Collection.extend({
    model: mBox,
    url: 'http://localhost/oferta/prueba1/?json=get_taxonomy&taxonomy=habilidad&dev=1'
});
var Form = Backbone.Model.extend({
    schema: {
        id:                     {},
        nombre:                 {},
        apellidos:              {},
        email:                  { type: 'Text', dataType: 'email', validators: ['required', validateEmail] },
        telefono:               { type: 'Text', dataType: 'tel', validators: ['required'] },
        nacionalidad:           { type: 'Select', options: ['Española', 'Extranjera'] },
        link1:                  { type: 'Text', title: 'Enlace a Reel', dataType: 'url' },
        link2:                  { type: 'Text', title: 'Enlace a Web/Blog', dataType: 'url' },
        otros:                  { type: 'Text', dataType: 'url' },
        skills:                 { type: 'Checkboxes', options: new cBox() },
    }
});

Ответы [ 2 ]

1 голос
/ 02 марта 2012

У тебя хорошее начало.То, что я думаю, может сбить вас с толку, так это то, как данные на самом деле выбираются и помещаются в коллекцию.У вас есть определенное свойство url в cBox вашей коллекции, но оно само по себе не получает никаких данных с сервера.Вы должны вызвать метод Collection.fetch() Backbone, чтобы получить данные и поместить их в коллекцию.

Я бы сделал что-то вроде этого:

cBoxCheckboxes = new cBox(); // create a new cbox, but there is no data in here yet
cBoxCheckboxes.fetch(); // make a get request to the server (at the url you've specified) to get the data
var Form = Backbone.Model.extend({
    schema: {
        id:                     {},
        nombre:                 {},
        apellidos:              {},
        email:                  { type: 'Text', dataType: 'email', validators: ['required', validateEmail] },
        telefono:               { type: 'Text', dataType: 'tel', validators: ['required'] },
        nacionalidad:           { type: 'Select', options: ['Española', 'Extranjera'] },
        link1:                  { type: 'Text', title: 'Enlace a Reel', dataType: 'url' },
        link2:                  { type: 'Text', title: 'Enlace a Web/Blog', dataType: 'url' },
        otros:                  { type: 'Text', dataType: 'url' },
        skills:                 { type: 'Checkboxes', options: cBoxCheckboxes /* the collection with the data in it */ },
    }
});
0 голосов
/ 02 марта 2012

что решения не работают так, как хотелось бы .. Я переписываю код и делаю это:

var mmyBox = Backbone.Model.extend({});

var cmyBox = Backbone.Collection.extend({
    model: mmyBox,
    url: 'http://localhost/wordpress/oferta/prueba1/?json=get_taxonomy&taxonomy=habilidad&dev=1',
    parse: function (resp, xhr) {
        console.log(resp.terms);
        return resp.terms;
    }
});

function validateEmail(str) {
    var regex = new RegExp("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?");

    return regex.test(str) ? null : 'Invalid email';
}

var Form = Backbone.Model.extend({
    schema: {
        id:                     {},
        nombre:                 {},
        apellidos:              {},
        email:                  { type: 'Text', dataType: 'email', validators: ['required', validateEmail] },
        telefono:               { type: 'Text', dataType: 'tel', validators: ['required'] },
        nacionalidad:           { type: 'Select', options: ['Española', 'Extranjera'] },
        link1:                  { type: 'Text', title: 'Enlace a Reel', dataType: 'url' },
        link2:                  { type: 'Text', title: 'Enlace a Web/Blog', dataType: 'url' },
        otros:                  { type: 'Text', dataType: 'url' },
        skills:                 { type: 'Checkboxes', options: new cmyBox() },
    }
});

Функция анализа возвращает элементы массива из json.

Array
{
  "status": "ok",
  "count": 3,
  "terms": [
    {
      "id": 11,
      "slug": "artist",
      "title": "artist",
      "description": "",
      "post_count": 1
    },
    {
      "id": 13,
      "slug": "medico",
      "title": "medico",
      "description": "",
      "post_count": 1
    },
    {
      "id": 12,
      "slug": "programador",
      "title": "programador",
      "description": "",
      "post_count": 1
    }
  ]

Кажется, что новый cmyBox не создает новую коллекцию. Хорошо, это то, что я вижу на консоли.

Спасибо, Джош, за ответ. Приветствия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...