Использование вспомогательной функции в строке jquery.find в Laravel 4

У меня есть вспомогательная функция, которую я настроил для преобразования метки времени в читаемую дату в Laravel 4. Эта функция называется "getDate" в файле StringEdit.php (в папке "helpers"). Я знаю, что эта функция работает.

Я пытаюсь использовать эту функцию в вызове jquery, который берет данные из базы данных и загружает их в идентификатор div (загружая больше данных при каждом нажатии). Вот код:

который вызывается в html, используя div id "activity":

<div id="activity">
 <table>
 <thead>
 <tr>
 
 
 </tr>
 </thead>
 <tbody>

 </tbody>
 </table>
<button>
 More 
</button>
</div>

Все выводится правильно, за исключением части created_at. Я получаю сообщение об ошибке:

SyntaxError: missing ) after argument list

ссылаясь на строку:

$post.find('.created_at').html(posts[post].StringEdit::getDate(created_at));

Вы знаете, как я бы назвал эту функцию для редактирования объекта created_at из базы данных в jquery? Спасибо за помощь.

2 ответа

В соответствии с вашим ответом, касающимся переменных, переданных шаблону blade-сервера, вы написали, что представленный вами javascript-код - "это в самом файле клинка. И переменная post связана через ajax". Я думаю, что решение довольно просто - вы можете выполнить свои требования только для лезвия wity и php, без JS (что избыточно в вашем случае)

в вашем контроллере laravel 1) передать переменную $ posts в представление (чем вернуть ее, отобразить или что-то другое, что бы выполнялось в вашей реализации шаблонов)

View::make('posts', $posts);

в шаблоне клинка 1) подавать сообщения переменной в шаблон, как вы уже делали 2) структурировать переменную "шаблон" u в javascript как шаблон шаблона лезвия php 3) используйте лезвие для заполнения переменных данными (вместо того, чтобы разбирать код шаблона с помощью JS, как и сейчас)

в некотором примере ниже (просто фрагмент):

// app/views/posts.blade.php

{{-- this is a blade comment --}}

<div id="activity">


{{-- in the below foreach loop you put the html you currently have in javascript template variable var template; --}}

@foreach ($posts as $post)


{{-- inside the foreach loop you have access to all your $posts, so while iterating you can do: --}}


{{-- 1) access $post fields --}}
{{ $post->id }} 
{{ $post->fbid }} 
{{ $post->whatever }} 

{{-- 2) access $post fields and apply function on them --}}
{{ StringEdit::getDate($post->whatever) }} 

@endforeach 

 <table>
 <thead>
 <tr>
 
 
 </tr>
 </thead>
 
</table>
<button>
 More 
</button>
</div>

Если вы сделаете так, как вам было предложено, вам не придется беспокоиться о проблемах с Php для Javascript, и это похоже на более чистое и более простое решение вашей проблемы. И, конечно, у вас будет то, о чем вы просили, - вы сможете использовать функцию-хелпер-строку в шаблоне :)

РЕДАКТИРОВАТЬ: Я обновил вышеуказанную запись, чтобы включить информацию из обсуждения в комментариях

EDIT 2: Отвечая на ваш запрос:

Использование пользовательской модели Eloquent accessor

Предположим, у вас есть поле (datacolumn) в вашей модели (которое, конечно, представляет собой таблицу в базе данных), имя поля - MyFancyField. Теперь для вашей системы у вас должна быть возможность, чтобы получить это полевое содержимое, предварительно обработанное - вам нужно, чтобы он был прописным. Таким образом, вы создаете пользовательский аксессуар, как показано ниже, и ссылаетесь на него (используйте его), как и другое поле вашей модели.

Модель: /app/models/Book.php

class Book extends Eloquent {

 protected $table = 'books';

 public function toArray()
{
 $array = parent::toArray();
 foreach ($this->getMutatedAttributes() as $key)
 {
 if ( ! array_key_exists($key, $array)) {
 $array[$key] = $this->{$key}; 
 }
 }
 return $array;
}

public function getUpperMyFancyField()
{
 return strtoupper($this->myFancyField); 
}

}

Контроллер: /app/controller/

public function index(Book $book)
{
$this->book = $book; 

echo "The original field fetched by a default accessor: " . $this->book->myFancyField;
echo "The uppercased field fetched by another custom accessor: " . $this->book->upperMyFancyField;

}

Как раз для записи, toArray() перегружен специально, потому что Laravel 4 по умолчанию не включает "настраиваемые поля доступа" в возвращаемый объект как массив. Так что если у вас этого не было, и хотел $this-> book-> toArray(), он не включил бы topMyFancyField там.


Почему вы просто не используете Accessor в красноречивой модели из базы данных, так что вам вообще не нужна функция getDate()?

class User extends Eloquent {

 public function getCreatedAt($value)
 {
 // created_at will now be formatted as "d-m-Y"
 return date('d-m-Y', strtotime($value));
 }

}

Просто измените формат даты() на все, что вам нужно (то же самое, что и формат функции getDate())

licensed under cc by-sa 3.0 with attribution.