【问题标题】:How to call Bootstrap jquery function from Ember 2 on specific action如何在特定操作上从 Ember 2 调用 Bootstrap jquery 函数
【发布时间】:2017-07-24 09:47:56
【问题描述】:

我正在做聊天应用程序,目前我设法在我的 Ember2.14 项目中添加 bootstrap/bootsnipp 代码(Html,css,jquery),然后当我将它添加到这个文件夹 public/assets/Chat.js 中时,jquery 工作正常我在 app/index.html 中添加了对它的引用。它现在已加载到 vendor.js 中,并且当我加载页面时 jquery 工作正常......

-我的问题是:如何从 Ember 调用 jquery 函数(再次)以及将代码放在哪里。我希望当我按下发送按钮时将我的输入消息放在聊天窗口中,并具有 jquery 效果,如 Bootstrap 示例在下面的链接中..

我对 jquery 和 Ember 完全陌生,所以我不确定我需要调用以下 jquery 代码中的哪个函数(我认为它可能是 sendMessage)以及如何从 Ember 中调用它..

jquery:

(function () {
    var Message;
    Message = function (arg) {
        this.text = arg.text, this.message_side = arg.message_side;
        this.draw = function (_this) {
            return function () {
                var $message;
                $message = $($('.message_template').clone().html());
                $message.addClass(_this.message_side).find('.text').html(_this.text);
                $('.messages').append($message);
                return setTimeout(function () {
                    return $message.addClass('appeared');
                }, 0);
            };
        }(this);
        return this;
    };
    $(function () {
        var getMessageText, message_side, sendMessage;
        message_side = 'right';
        getMessageText = function () {
            var $message_input;
            $message_input = $('.message_input');
            return $message_input.val();
        };
        sendMessage = function (text) {
            var $messages, message;
            if (text.trim() === '') {
                return;
            }
            $('.message_input').val('');
            $messages = $('.messages');
            message_side = message_side === 'left' ? 'right' : 'left';
            message = new Message({
                text: text,
                message_side: message_side
            });
            message.draw();
            return $messages.animate({ scrollTop: $messages.prop('scrollHeight') }, 300);
        };
        $('.send_message').click(function (e) {
            return sendMessage(getMessageText());
        });
        $('.message_input').keyup(function (e) {
            if (e.which === 13) {
                return sendMessage(getMessageText());
            }
        });
        sendMessage('Hello Philip! :)');
        setTimeout(function () {
            return sendMessage('Hi Sandy! How are you?');
        }, 1000);
        return setTimeout(function () {
            return sendMessage('I\'m fine, thank you!');
        }, 2000);
    });
}.call(this)); 

完整的引导代码: https://bootsnipp.com/snippets/ZlkBn


更新请举例说明你的答案,因为我还是 ember 的新手。

这是我的代码:

1-templates/application.hbs:

<div class="chat_window">
    <div class="top_menu">
    <div class="buttons">
    <div class="button close"></div>
    <div class="button minimize"></div>
    <div class="button maximize"></div>
    </div>
    <div class="title">Chat</div>
    </div>
    <ul class="messages">
      {{#if responseMessage}}
        {{#each model as |chat|}}
          <div>{{chat.message}}</div>
        {{/each}}
      {{/if}}

    </ul>
    <div class="bottom_wrapper clearfix">
        <div class="message_input_wrapper">
            {{input class="message_input" value=messageInput placeholder="Type your message here..." }}
        </div>
        <button class="send_message"  disabled={{isDisabled}} {{action 'saveMessage'}} >
          <div class="icon"></div>
          <div class="text">Send</div>
        </button>

      </div>
    </div>

2-routes/chat.js

import Ember from 'ember';

export default Ember.Route.extend({
  model(){
return this.store.findAll('chat');
}
});

3-models/chat.js

import DS from 'ember-data';
export default DS.Model.extend({
  message: DS.attr('string')
});

4-controllers/chat.js

import Ember from 'ember';
export default Ember.Controller.extend({
 responseMessage: '',
  messageInput: '' ,

  isDisabled: Ember.computed.empty('messageInput'),

  actions: {
    saveMessage() {
      var _that = this;
      var inputMessage = this.get('messageInput');
      var newInputMessage = this.store.createRecord('chat',{
        message: inputMessage
         });

      //Call super script BackEnd
        var url ='http://localhost:5000/superscript?message='+this.get('messageInput');
       console.log('Request URL is :',url);
        Ember.$.getJSON(url).then(function(data) {
         _that.set('responseMessage', data.message);
        _that.set('messageInput', '');
        console.log('resonse is :',data.message);
        var newResponseMessage = _that.store.createRecord('chat',{
          message: data.message
           });

         });
    }//save
  }//actions
});//export

【问题讨论】:

    标签: javascript jquery ember.js ember-data


    【解决方案1】:

    实际上,在这种情况下,jQuery 代码管理所有内容,您无需使用其他 javascript 框架即可获得该功能。如果您想使用 Ember.js,在 Ember.js 级别复制此功能的最佳方式。您仍然可以使用引导样式,但功能将在 Ember.js 中实现,您不必使用 jQuery。

    例如,这里是 Ember 中的聊天实现:https://github.com/zoltan-nz/chat-app

    【讨论】:

    • 感谢您的快速回复,感谢您分享您的代码,我将尝试运行它....我只是想知道为什么我不能在操作中调用某些 jquery 函数为什么我需要复制 jquery Ember 中的代码..你能告诉我如何从 ember 调用 jquery。我尝试了 didInsertElement 但我是 jquery 的新手,我不知道我需要调用 jquery 代码中的哪个方法以及如何从 Ember 调用它。
    • 同意佐尔坦。除非你真的需要 jQuery,否则最好假设你不需要 jQuery 和 Ember。您应该能够使用 Ember 而不使用 jQuery 来做您想做的事情。将两者结合起来是可能的,但在您第一次学习 Ember 时并不容易做到。
    猜你喜欢
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多