3

我对 js 和 Angular 还很陌生,但是在观看了 Ryan Bates 在 Rails+AngularJS 上的 railscast(http://railscasts.com/episodes/405-angularjs?autoplay=true)之后,我试图让 Rails 应用程序正常工作。

我相信我想做的事情相当简单:我有一个 Place 模型,其中包含许多电话,并且我希望能够在创建新地点时动态添加和保存电话。这种类型的嵌套表单仅在 Rails 中相当容易(js 仅在用户添加电话时创建新的字段元素),但我想在 Angular 中执行此操作。

我想我的问题分为两个:1)在 Rails+AngularJS(甚至一般的表单)中创建嵌套表单的最佳实践是什么?现在我通过 JSON 将每个模型传递给 Angular,但这是最好的方法吗?

我的第二个问题是指以下代码。

我试图这样做,我能够以角度保存一个地方:

places_controller.rb

respond_to :json 
def create
  respond_with Place.create(params[:place])
end

_form.html.erb

<div class="container-fluid" ng-controller="PlaceCtrl">
  <form ng-submit="addPlace()">
    <div class="row-fluid">
      <div class="span2"><label>Name</label></div>
      <div class="span8"><input type="text" class="input-xlarge" ng-model="newPlace.name"></div>
    </div>
    <input type="submit" class="btn" value="Add">
  </form>
</div>

place.js.coffee

app = angular.module("test", ["ngResource"])

app.factory "Place", ($resource) ->
  $resource("/places/:id", {id: "@id"}, {update: {method: "PUT"}})

app.factory "Phone", ($resource) ->
  $resource("/phones/:id", {id: "@id"}, {update: {method: "PUT"}})

@PlaceCtrl = ($scope, Place, Phone) ->

  $scope.addPlace = ->
    place = Place.save($scope.newPlace)
    console.log place
    $scope.newPlace = {}

在 place.js.coffee 中,我可以将 Place 保存到 DB 行中(place = Place.save($scope.newPlace))。我想要地点的 id,所以我可以将它附加到所有动态构建的电话上(因为电话有一个指向地点的 place_id 的 FK)。但是,如果我在控制台中输入 place.id,我会收到一条未定义的消息。place.name 将返回该地点的名称,但 id 不起作用。但是,如果我查看 console.log 位置,我会看到返回并填充了 id 字段。

2) 如何获取地点 JSON 对象的 id 字段?我几乎肯定这是可能的,因为 Chrome 的控制台返回 id 字段但 place.id 不会给我任何东西。

预先感谢您的帮助。我非常感激。

4

1 回答 1

0

我会尝试这样的事情:

$scope.addPlace = ->
  place = Place.save($scope.newPlace) ->
    $scope.newPlaceId = place.id
  console.log place
  $scope.newPlace = {}
于 2013-03-22T19:17:29.007 回答