AppGyver Steroids Supersonic Views

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

У меня есть приложение, которое вызывает API-интерфейс кимоно, все настроено со сверхзвуковым фоном и выглядит нормально. У меня есть 1 строка и 2 объекта в API. У меня есть страница, которая вызывает полный список событий, используя страницу с именем event:

{{событие.событиеописание}}

The Event#Index controller is:

    angular
      .module('event')
       .controller("IndexController", function ($scope, Event, supersonic) {
        $scope.events = null;
        $scope.showSpinner = true;

    Event.all().whenChanged( function (events) {
        $scope.$apply( function () {
          $scope.events = events;
          $scope.showSpinner = false;
        });
    });
    });

And all of that displays properly. The issue is when I click on one of those items shown which should go to the specific event I get nothing. And I'm sure I'm doing this wrong or don't understand enough about switching views. I've read many examples, but I'm not getting how it all goes together.

вот моя страница event#show. Очень общий, просто пытаюсь загрузить любую информацию на данный момент.

<div ng-controller="ShowController">
  <super-navbar>
    <super-navbar-title>
      Show
    </super-navbar-title>
  </super-navbar>
<div class="padding">
  {{ event.eventdescription }}
</div>
</div>

И шоуконтроллер:

angular
  .module('event')
  .controller("ShowController", function ($scope, Event, supersonic) {
     $scope.events = null;


        Event.all().whenChanged( function (events) {
            $scope.$apply( function () {

            });
        });
      });

И это всегда возвращает пустую страницу. Когда я проверяю журнал, он говорит Undefined.undefined, что я не уверен, что это значит.

Любое понимание этого очень ценится. В документах appgyver я видел что-то под названием.

var view = new supersonic.ui.View("bananas#show");
                                    supersonic.ui.layers.push(view);

Но я не уверен, как это использовать? ЛЮБОЕ понимание приветствуется.

Итак, ОБНОВЛЕНО У меня есть:

вот индекс события #, с которым я работаю.

<div ng-controller="IndexController">
  <super-navbar>
    <super-navbar-title>
      Event Index
    </super-navbar-title>
  </super-navbar>

    <ul class="list" ng-hide="events.length == 0">

          <super-navigate view-id="event#show" data-params-id="{{event.id}}" ng-repeat="event in events">

        <li class="item item-icon-right">
          <h2 ng-bind="event.EventTitles['text']"></h2>
      <img ng-src="{{ event.HeadlineImages.src }}" width="100px" height="100px">
      <p> {{ event.eventdescription }} </p>

          <i class="icon super-ios7-arrow-right"></i>
        </li>
      </super-navigate>
    </ul>
  </div>

И контроллер индекса

 angular
  .module('event')
  .controller("IndexController", function ($scope, Event, supersonic) {
    $scope.events = null;

    Event.all().whenChanged( function (events) {
        $scope.$apply( function () {
          $scope.events = events;

        });
    });
  });

Показать html-страницу.

<div ng-controller="ShowController">
  <super-navbar>
    <super-navbar-title>
      Show
    </super-navbar-title>
  </super-navbar>

  <div class="padding">
     <p>
      {{event.eventdescription}}
     </p>
  </div>
</div>

Шоуконтроллер

angular
  .module('event')
  .controller("ShowController", function ($scope, Event, supersonic) {
    supersonic.ui.views.current.params.onValue( function (Event) { 

    $scope.events = event.id; 

});
Event.find($scope.events).then( function (Event) {
$scope.$apply( function () {
 $scope.event = Event;

  });
  });


  });

И я также обновил Structure.coffee так

 rootView:
    location: "event#index"

  preloads: [
  {
  id: "event#show"    
 }
 {
  id: "using-the-scanner"
  location: "example#using-the-scanner"
 }
 ]

Любая помощь приветствуется.


person Cedric    schedule 31.03.2015    source источник
comment
Какова разметка для каждого события в списке? Использует ли он <super-navigate> со свойством location и атрибутом данных? Вы можете попробовать добавить это в свой контроллер шоу: supersonic.ui.views.current.whenVisible( function () { // you code for watching events }); И если есть параметры, поступающие с атрибутом местоположения, вы можете отслеживать их с: supersonic.ui.views.current.params.onValue( function (values) { // values.nameOfPropertyPassedInCouldBeEventId });   -  person area28    schedule 01.04.2015
comment
Чистый файл JSON выглядит следующим образом: collection1: [ { eventdescription: HeadlineImages: { text: src: href: }, EventTitles: { text: href: }   -  person Cedric    schedule 01.04.2015


Ответы (2)


Не похоже, что данные устанавливаются в вашем ShowController. Я прокомментировал это раньше. Я думаю, вам нужно передать идентификатор события, используя <super-navigate> со свойством location и data-params-id или любым другим именем параметра, которое вы хотите. Затем в вашем ShowController вы можете получить к нему доступ с помощью:

supersonic.ui.views.current.params.onValue( function (values) { 
    // values.nameOfPropertyPassedInCouldBeEventId
    $scope.id = values.id; 
});

Затем вы можете сделать что-то вроде этого, чтобы получить доступ к событию по идентификатору:

Event.find($scope.id).then( function (theEvent) {
    $scope.$apply( function () {
      $scope.event = theEvent;
    });
  });

Теперь, по вашему мнению, там, где у вас есть {{ event.eventdescription }}, должны быть некоторые данные.

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

supersonic.ui.views.current.whenVisible( function () { 
    // your code for watching events 
});
person area28    schedule 01.04.2015
comment
Я не уверен, что понимаю, как работает контроллер. и их расположение в контроллере. ?? Я действительно новичок в этом. - person Cedric; 03.04.2015
comment
Часть Event.all().whenChanged(). Ознакомьтесь с сверхзвуковыми данными. - person area28; 06.04.2015
comment
Я по-прежнему ничего не получаю на странице шоу... не знаю, как заставить это работать, извините. полный новичок в этом деле. - person Cedric; 07.04.2015
comment
Есть ли способ загрузить что-то без идентификатора - в этом случае события поступают из rest.api из appgyver, заполненного Kimono. Там нет идентификатора события, и мне трудно понять это. Прошла пара недель с небольшим прогрессом, но пока нет определенного ответа на проблему, с которой я столкнулся. есть github [ЗДЕСЬ] (github.com/Cedrius/SteroidsEventTest) - person Cedric; 10.04.2015

Хорошо, после пары недель попыток заставить это работать, и хотя я до сих пор не смог заставить это работать.. Я думаю, что НАКОНЕЦ-ТО я достиг чего-то с этим... Кажется, самая большая проблема здесь используя Kimono и AppGyver. Файл JSON был обновлен в Kimono с использованием:

function transform(data) {
  data.results.collection1 = data.results.collection1.map(function(o) {
    o.eventdescription = {
      text: o.eventdescription
    }
    return o;
  });
  return data;
}

Это очищает файл JSON, экспортированный/входящий как API в App Gyver, чтобы все части были объектами. (Я знаю, может быть, это не имеет большого значения, но я просто хотел сделать это как можно более чистым). Чтобы дать вам представление о том, что было до и после использования этого скрипта в поле «Результаты изменения кимоно» --> ДО:

"EventTitles": {
"href": "http://",
"src": "http://.jpg",
"text": "Lorem Ipsum"
},
"HeadlineImages": {
"href": "http://",
"src": "http://.jpg",
"text": "Lorem Ipsum"
},
"eventdescription":"Lorem Ipsum" 
},

который оставляет описание события в виде строки, а не объекта, а затем ПОСЛЕ:

"EventTitles": {
"href": "http://",
"src": "http://.jpg",
"text": "TEXT"
},
"HeadlineImages": {
"href": "http://",
"src": "http://.jpg",
"text": "TEXT"
},
"eventdescription": {
"text": "TEXT"
}, 

Итак, после запуска этого в Кимоно, как вы можете видеть, все записи являются «объектами». И вы должны использовать &kimmodify=1 ПОСЛЕ apikey в ссылке следующим образом:

https://www.kimonolabs.com/api/{indentifier}{apikey}&kimmodify=1

ДАЛЬШЕ, как мне объяснило сообщество AppGyver, в значительной степени потребуется своего рода «идентификатор» для каждого элемента в JSON/API, который создается, чтобы иметь возможность использовать ShowController для создания разумной/выполнимой строки URL-адреса на показать.html.

Что должно создать что-то вроде /app/tier/showid=123456789 при переходе от индекса к определенному представлению записи.

(URL-адреса можно найти, используя режим отладки в AppGyver либо через Safari Web Inspector на Mac с эмулятором IOS, либо через браузер, использующий http://localhost:[some port number]/location/of/app при использовании эмулятора Android (рекомендуемый Genymotion).

Итак, чтобы сделать это, в Kimono используйте добавление хэша API &kimhash=1 в конец вашего URL-адреса ПОСЛЕ APIKEY, но ДО изменения, такого как это:

https://www.kimonolabs.com/api/{indentifier}{apikey}&kimhash=1&kimmodify=1

. См.: Kimono API Docs-Re:Hash.

Это создает что-то вроде

"EventTitles": {
"href": "http://",
"src": "http://.jpg",
"text": "TEXT"
},
"HeadlineImages": {
"href": "http://",
"src": "http://.jpg",
"text": "TEXT"
},
"eventdescription": {
"text": "TEXT"
}, 
"hash":"1a2b3c4d5e6f7g8h9z"},

для каждой записи создается случайный «идентификатор».

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

https://www.kimonolabs.com/api/{indentifier}{apikey}&kimhash=1&kimmodify=1

и когда вы собираетесь настроить свой API на серверной части, я не вижу области для ввода этого нового &kimhash=1&kimmodify=1, который должен быть в конце URL-адреса для вызова в правильно отформатированном API с идентификатором и насколько далеко как я вижу, нет ссылки на это.

http://docs.appgyver.com/supersonic/guides/data/other-data-providers/kimono-labs/

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

Любые идеи??

person Cedric    schedule 14.04.2015