Не показывать данные с response.rb

Я просто пытаюсь использовать ReactRB с реактивной записью.

Таким образом, сделка находится в части рендера, я думаю. Когда я устанавливаю param :user, type: User в классе React Component я не вижу никаких данных в своей таблице. Конечно модель пользователя в публичной папке, так как это требование в ReactRB.

Ну, в консоли я вижу, что сервер ничего не получает, но верные данные вернулись.

Что мне не хватает? Спасибо за помощь!

Ключ для ответа на этом скриншоте

Детали в том, что данные возвращаются с сервера, когда реактивная запись json blob декодирует их, но рассчитывает на то, что если вы попытаетесь json проанализировать простую строку, это вызовет ошибку. опал 0.10 больше не вызывает стандартную ошибку, поэтому все зависает.

2 ответа

Решение

Просто подумать об этом... есть известная проблема в Опале https://github.com/opal/opal/issues/1545 и это вызывает проблему в реактивной записи. Пожалуйста, убедитесь, что вы не используете опал 0.10

Нужно иметь в виду, что ленивые реактивные записи загружают записи и атрибуты. Таким образом, если в каком-либо месте вашего рендера нет доступа к определенной записи / атрибуту, этот атрибут не будет отображаться на клиенте.

Трудно сказать больше, не публикуя чуть больше кода, но вот некоторая помощь:

Допустим, ваш компонент выглядит так:

class Foo < React::Component::Base
  param :user, type: User
  def render
    "user.name = #{user.name}"
  end
end

и где-нибудь в контроллере или в макете вы делаете это:

render_component '::Foo', {user: User.first}

Вы можете попробовать что-то очень простое, как это, просто чтобы узнать, как все работает.

Должно произойти следующее: вы отобразите свой вид, и заполнитель для первого пользователя будет отправлен компоненту, во время рендеринга компонент ищет атрибут имени этого пользователя, которого у него нет, поэтому он ставится в очередь для выборки из сервер. Визуализация будет завершена, и в конечном итоге данные будут поступать с сервера, данные локальной модели будут обновлены, а компоненты, отображающие эти данные, будут перерисованы.

Во время предварительного рендеринга все вышеперечисленное происходит внутри сервера, и когда компонент отображается, окончательный HTML-код доставляется вместе со всеми данными модели, которые использовались при отображении компонента. Таким образом, при первой загрузке, если все работает, вы не увидите никаких выборок с сервера.

Поэтому, если вы попробуете приведенный выше небольшой пример и зайдете в консоль javascript, вы можете сказать что-то вроде этого:

Opal.User.$first()

и вы увидите возвращаемую структуру данных базовой модели (я перевожу из JS в ruby ​​выше... все методы ruby ​​начинаются с $)

Затем вы можете сделать это:

Opal.User.$first().$name() 

И вы даже можете сделать это (при условии, что есть по крайней мере 2 пользовательских модели):

Opal.User.$find(2).$name()

Вам должно быть возвращено что-то вроде "DummyValue", но тогда в консоли будет цикл выборки с сервера, а затем, если вы повторите эту команду, вы вернете фактическое значение!!!

Это может быть не лучший форум для получения дополнительной информации, если вам нужно зайти на https://gitter.im/reactrb/chat для получения дополнительной помощи

Другие вопросы по тегам