【问题标题】:JSON data in a list duplicating with Grails <g:each> incorporation列表中的 JSON 数据与 Grails <g:each> 合并重复
【发布时间】:2017-04-03 11:13:22
【问题描述】:

我正在页面上显示来自 JSON 源的动态音乐会列表。这些也从这个来源添加到我的数据库中,但由于各种原因没有从我的数据库中显示在这个页面上。

我想在通过 JSON 显示的音乐会列表中包含指向每个数据库音乐会的演出页面的链接。

这获取了我的 JSON 音乐会:

  function fetch(){      
if($scope.search == "" || $scope.search == null){
  $.getJSON("http://api.bandsintown.com/events/search.json?&api_version=2.0&app_id=FYP&location=Dublin,Ireland", function(result) 
  {
    $scope.$apply(function()
    {
      $scope.details = result;

      changeDate();
    }, 0);
  });    
}

来自该 JSON 的音乐会是接下来的 50 场演出,所以我已经获得了指向我数据库中最后 50 个音乐会条目的演出页面的链接,这将与 JSON 匹配,如下所示:

    def index() 
{
    int eventCount = Event.count()
    int startingPoint = eventCount - 50

    def events = Event.createCriteria().list
    {
        order('id')
        firstResult(startingPoint)
        maxResults(50)
    }

    respond events
}

尝试组合 JSON 和节目链接会导致两个循环发生冲突,并在页面上生成 50 x 50 的列表 - 每个 JSON 条目都有一个指向每个节目的链接,反之亦然。

  <ul class="rel-results"> 
  <g:each in="${eventInstanceList}" status="i" var="eventInstance">
    <li ng-repeat="show in details">
        <!-- SHOW LINKS -->
        <g:link action="show" controller = "Event" id="${eventInstance.id}">Info</g:link>

        <div class = "event-date-time">{{ show.datetime }}</div>

        <div class = "event-item">  
          <div class = "nameAndTicket row" style="margin-left: 0;margin-right: 0">
            <span class="artist-name col-md-10">
              <a href="#/" id="{{ $index + 1 }}" ng-click="update(show)" class = "artist-item">
                  {{ show.artists[0].name }}
              </a>
            </span>

          </div>

          <div class="venueAndRSVP row" style="margin-left: 0;margin-right: 0">
            <span class="venue-name col-md-10">
              <a href="#/" id="{{ $index + 1 }}" ng-click="update(show)" class = "venue-item">           
                <div style = "text-transform: lowercase;display: inline-block;color: red;font-size: 80%;">at</div> {{ show.venue.name }}  {{ show.formatted_location }}
              </a>
            </span>
          </div>
        </div>
    </li>
    </g:each>
  </ul>

我尝试过 Angular 独特的过滤器,甚至 hacky JS 来删除页面上的重复链接,但我认为这些想法是错误的。我觉得我需要以某种方式将 g:each 和 ng-repeat 结合起来——实际上这样做是行不通的。

任何帮助将不胜感激!

编辑以添加事件域

class Event implements Rateable, Commentable  {


int bandsintown_id
String artist
String venue
String ticket_url
String ticketStatus
String eventTime
String livestream

static constraints = 
{
    bandsintown_id unique:true
    livestream nullable:true

}

【问题讨论】:

  • 域对象上的 eventInstanceId 是否与调用 api.bandsintown.com/events/… 返回的 json 条目上的 id 相同?如果没有,有没有办法唯一地链接 2 个数据源?
  • 不,两者本质上是相互独立的
  • 您能解释一下您要显示的内容吗?例如对于每个数据库条目,显示一个指向完整数据库记录的链接以及来自 json 的确切内容,2 链接如何?
  • 我的页面上有一个 JSON 事件列表,以角度显示。我想在匹配的
  • 元素中显示我的数据库中匹配事件的显示页面的链接。当我像上面那样添加 g:each 时,它列出了 50 个节目链接以及我列出的每个 JSON 事件,其中每个
  • 元素都有一个指向每个节目的链接——所以列表中的 50x50 = 2500。我认识到这可能很难想象!谢谢
  • 我可以理解为什么会这样,对于您正在迭代的每个数据库行,您正在迭代 json 中的每一行。什么连接了这两个数据集? ID、名称等。一旦我们知道这一点,您就可以从 DB 列表或 json 列表中获取匹配行的数据。
  • 标签: javascript jquery angularjs json grails


    【解决方案1】:

    来自 json 的 id 存储在您的 Event 域中,因此这是用于将 2 链接在一起的最佳/最独特的东西,这对我有用...

    EventController

    def showByBandId() {
        def event = Event.findByBandsintown_id( params.id )
        // add some error handling here in case event isn't found
        redirect ( action: 'show', id: event.id )
    }
    

    homepage.gsp

    <div id="related_results">
        <g:render template="partials/shows" />
    </div>
    

    shows.gsp

    ...
    <li ng-repeat="show in details">
    <a ng-href="${createLink( controller: 'event', action: 'showByBandId' )}/{{show.id}}">Info</a>
    ....
    

    【讨论】:

    • 我收到“无法在空对象上获取属性 'ticket_url'”错误。我编辑了我的原始帖子以添加我的域类。
    • 如果可能,我会将您的域类属性名称重命名为ticketUrl,如果数据库中的名称是ticket_url,您可以将其添加到映射中,例如static mapping = { ticketUrl column: 'ticket_url' },Grails 可能无法很好地处理属性名称中的下划线
    • 我已经这样做了,但错误仍然存​​在。完整的错误消息显示“由 GrailsTagException 引起:执行标记时出错 :在第 [11] 行上评估表达式 [Event.findByTicketUrl( show.ticket_url )?.id] 时出错:无法在空对象上获取属性 'ticket_url' ' -- 此代码是由 注入的,这会导致任何问题吗?
    • 我也尝试过ticketUrl / ticket_url和id / bandintown_id的不同组合
    • 是的,如果你作为模板加载,你通常会将数据传递给模型,所以我猜你的 json 直到稍后才会加载 Grails 会抱怨,你能在json 可用吗?另一个选择当然是遍历数据库结果并为每一行获取数据库 ticketUrl 的 json
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签