0

我正在努力解决切换视图/将视图传递到另一个视图的问题。

我有一个调用和服 API 的应用程序,这一切都设置了超音速背景,看起来不错。我在 API 中有 1 个字符串和 2 个对象。我有一个页面正在使用名为事件的页面调用完整的事件列表:

{{ event.eventdescription }}

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.

这是我的活动#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);

但我不确定如何使用它?任何见解都值得赞赏。

所以,更新我有:

这是我正在处理的事件#index。

<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;

  });
  });


  });

我也更新了结构.coffee

 rootView:
    location: "event#index"

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

任何帮助表示赞赏。

4

2 回答 2

1

看起来数据不是在 ShowController 中设置的。我之前评论过这个。我认为您需要使用属性和 a 或任何您想要的参数名称来传递事件<super-navigate>locationid data-params-id。然后在您的 ShowController 中,您可以通过以下方式访问它:

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

然后你也许可以做这样的事情来通过 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 
});
于 2015-04-01T13:12:12.767 回答
0

好的,经过几周的努力让这个工作,虽然,我仍然无法让它工作..我想我终于可以解决这个问题了......似乎这里最大的问题是使用和服和 AppGyver。JSON 文件已在 Kimono 中更新,使用:

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

这会清理作为 API 到 App Gyver 导出/传入的 JSON 文件,以便所有部分都是对象。(我知道,也许没什么大不了的,但我只是想让它尽可能干净)。为了让您了解在和服修改结果框中使用此脚本之前和之后 -> 之前:

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

它将 eventdescription 保留为字符串而不是对象,然后是 AFTER:

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

因此,在将其运行到和服之后,您可以看到所有条目都是“对象”。因此,您将在链接中的 apikey 之后使用 &kimmodify=1 :

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

接下来,正如 AppGyver 社区向我解释的那样,一个正在创建的 JSON / API 中的每个项目都非常需要一个“id”,以便能够使用 ShowController 在显示.html。

/app/tier/showid=123456789从索引到特定条目视图时应该创建类似的东西。

(您可以使用 AppGyver 中的调试模式找到 URL,或者通过 Mac 上的 Safari Web Inspector 和 IOS 模拟器。或者http://localhost:[some port number]/location/of/app使用 Android 模拟器(推荐的 Genymotion)时使用的浏览器。

因此,要做到这一点,在和服中使用 API Hash 添加 &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"},

为每个条目创建一个随机“标识符”。

现在,这就是我现在卡住的地方。...因为需要输入的 API URL 是:

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

当您在后端配置 API 时,我看不到可以输入这个新的 &kimhash=1&kimmodify=1 的区域,该区域需要位于 URL 的末尾才能调用正确格式和 id 的 API,并且到目前为止正如我所看到的,没有这样做的参考。

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

我觉得这是弄清楚这一切并最终能够启动并工作的最后一步。最后一个显然是重新将 id 拉入 ShowController,如果我能以某种方式弄清楚最后一部分,我对它有点信心。

有任何想法吗??

于 2015-04-14T23:58:53.140 回答