Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Привязка модели к дом элементам. (https://javascript.ru/forum/misc/40454-privyazka-modeli-k-dom-ehlementam.html)

pyatil 06.08.2013 13:36

Привязка модели к дом элементам.
 
Добрый день.

Преамбула:
Есть некая модель, которую нужно отобразить в, например, таблице.
Потом пользователь захочет изменять эти данные, он нажимает на ячейку в таблице и должна происходить магия (данные изменяются в таблице и записываются в модель, которая взаимодействует с чем-то еще).

Вопрос:
Как соотнести нажатый элемент с элементом в модели данных?
Какие есть способы организации этой связи?
Какие слова набрать в гугле чтобы найти информацию по данной теме.

З.Ы. Пишу совсем недавно.

ksa 06.08.2013 13:59

Тут бы пример какой-то не помешал бы... :D

pyatil 06.08.2013 14:20

// Generated by CoffeeScript 1.6.1
(function() {
  var $, List, Work,
    __hasProp = {}.hasOwnProperty,
    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
    _this = this;

  $ = jQuery;

  Work = (function(_super) {

    __extends(Work, _super);

    function Work() {
      return Work.__super__.constructor.apply(this, arguments);
    }

    Work.configure("Work", "author", "work_name", "work_link", "pub_date", "change_date", "size");

    Work.extend(Spine.Model.Ajax);

    Work.url = "/samlib/profile_user_json/";

    Work.fetch = function(clear) {
      if (clear) {
        console.log("clear: " + clear.clear);
        this.deleteAll();
      }
      return Work.__super__.constructor.fetch.apply(this, arguments);
    };

    return Work;

  })(Spine.Model);

  List = (function(_super) {

    __extends(List, _super);

    List.prototype.className = 'List';

    List.prototype.events = {
      'click li': 'my_click'
    };

    function List() {
      var _this = this;
      this.logged = function(auth) {
        return List.prototype.logged.apply(_this, arguments);
      };
      this.addAll = function() {
        return List.prototype.addAll.apply(_this, arguments);
      };
      this.addOne = function(task) {
        return List.prototype.addOne.apply(_this, arguments);
      };
      this.render = function(message) {
        return List.prototype.render.apply(_this, arguments);
      };
      List.__super__.constructor.apply(this, arguments);
      Work.bind('refresh', this.addAll);
      Spine.bind('login:change', this.logged);
    }

    List.prototype.my_click = function(e) {
      return e.preventDefault();
      /*
      	здесь какой-то код который должен найти по переданному элементу элемент в модели
      */

    };

    List.prototype.render = function(message) {
      return console.log(message);
    };

    List.prototype.addOne = function(task) {
      if (task.work_name) {
        this.teml = "<li><a href='" + task.work_link + "'>" + task.work_name + "</a></li>";
        $("#list").append(this.teml);
        return this;
      }
    };

    List.prototype.addAll = function() {
      return Work.each(this.addOne);
    };

    List.prototype.logged = function(auth) {
      console.log(Spine.auth);
      return Work.fetch({
        clear: true
      });
    };

    Work.fetch();

    return List;

  })(Spine.Controller);

  $(function() {
    return new List({
      el: $("#works")
    });
  });

}).call(this);

В коде используется фреймоврк Spine.js

Как я себе это вижу:
У каждого элемента в модели есть индентификатор, вставлять его в каждый элемент и по нему уже тогда идентифицировать. Но возможно есть более правильные способы, я хотел о них узнать, как вообще называется это связывание правильно, на английском, чтобы поискать материал по этой теме.

bes 06.08.2013 19:32

в простейшем случае: отсылаешь ajax-запрос с новыми данными (координаты ячейки + содержимое), записываешь в базу,
если таблица потенциально может менять свою структуру, следует подумать об eav

pyatil 07.08.2013 09:51

модель в самом приложении.
Как определить что именно эти координаты соответсвуют конкретному полю в базе данных? Какие есть способы?

bes 07.08.2013 21:22

Цитата:

Сообщение от pyatil
модель в самом приложении.

это не есть гуд, модель и база данных - понятия очень даже совместимые

Цитата:

Сообщение от pyatil
Как определить что именно эти координаты соответсвуют конкретному полю в базе данных? Какие есть способы?

SELECT content WHERE x = my_x AND y = my_y


Часовой пояс GMT +3, время: 07:41.